Exemple #1
0
    def check_system(self):
        self.result.insert(
            'end', '\n{text}\n\n'.format(
                text='Проверка режима доступа важных системных объектов'),
            'title')
        self.result.update()
        vulnerable = False
        for dir in self.sys_dirs.keys():
            current_per = command_seq(
                'ls -ld {}'.format(dir))[0].split('\n')[0].split(' ')[0][1:11]
            if current_per != self.sys_dirs[dir]:
                self.result.insert(
                    'end',
                    ' Права объекта: {}:{} отличны от рекомендуемых: {}\n'.
                    format(dir, current_per, self.sys_dirs[dir]))
                vulnerable = True

        if not vulnerable:
            self.result.insert(
                'end',
                ' Режимы доступа системных объектов соответствуют рекомендуемым\n',
                'clear')
            self.result.insert('end',
                               "\n Рекомендация: Действий не требуется\n",
                               'recommendations')
        else:
            self.result.insert(
                'end', "\n Рекомендация:\n" +
                "Убедитесь, что режимы доступа системных объектов не создают потенциальных угроз.\n"
                +
                "Если необходимо, то измените их на рекомендуемые c помощью команды chmod <perms> object.\n\n",
                'recommendations')
        return
Exemple #2
0
    def checkATD(self):
        self.result.insert('end', '\n{}\n\n'.format('Анализ файлов atd'), 'title')
        self.result.update()
        vulnerable = False

        allow = command_seq('sudo ls -l /etc/at.allow', self.password)
        deny = command_seq('sudo ls -l /etc/at.deny', self.password)

        if deny[1] != '':
            self.result.insert('end', " Файл /etc/at.deny отсутствует. Любой пользователь может использовать atd\n", 'warning')
            self.result.insert('end', " Рекомендация:\n"
		        + " Создайте файл /etc/at.deny с помощью touch и установите режим доступа 640\n", 'recommendations')
        else:
            deny_stats = deny[0].split()
            if  deny_stats[0] != '-rw-r-----' or deny_stats[2] != 'root' or deny_stats[3] != 'daemon':
                self.result.insert('end', " Файл /etc/at.deny имеет" 
                    + "режим доступа ({0},{1},{2}) отличный от рекомендуемых (-rw-r-----, root, daemon).\n"
                .format(deny_stats[0], deny_stats[2], deny_stats[3]), 'recommendations')
                self.result.insert('end', " Рекомендация:\n"
		            + " Измените режим доступа файла /etc/at.deny на рекомендуемые с помощью команды chmod, " 
                    + "chown и chgrp\n", 'recommendations')
            else:
                deny_file = command_seq('sudo cat /etc/at.deny', self.password)[0]
                self.result.insert('end', ' Содержимое файла /etc/at.deny:\n')
                self.result.insert('end', deny_file)
                self.result.insert('end', "\n Рекомендация:\n" 
                + "Проанализируйте файл /etc/at.deny и, если необходимо, отредактируйте его", 'recommendations')

        if allow[1] != '':
            self.result.insert('end', "\n Файл /etc/at.allow отсутствует.\n", 'warning')
            self.result.insert('end', " Рекомендация:\n"
		        + " Создайте файл /etc/at.allow с помощью touch и установите режим доступа 640\n", 'recommendations')
        else:
            allow_stats = allow[0].split()
            if  allow_stats[0] != '-rw-r-----' or allow_stats[2] != 'root' or allow_stats[3] != 'daemon':
                self.result.insert('end', " Файл /etc/at.deny имеет" 
                    + "режим доступа ({0},{1},{2}) отличный от рекомендуемых (-rw-r-----, root, daemon)\n."
                .format(allow_stats[0], allow_stats[2], allow_stats[3]), 'recommendations')
                self.result.insert('end', " Рекомендация:\n"
		            + " Измените режим доступа файла /etc/at.allow на рекомендуемые с помощью команды chmod, " 
                    + "chown и chgrp\n", 'recommendations')
            else:
                allow_file = command_seq('sudo cat /etc/at.allow', self.password)[0]
                self.result.insert('end', ' Содержимое файла /etc/at.allow:\n')
                self.result.insert('end', allow_file)
                self.result.insert('end', "\n Рекомендация:\n" 
                + "Проанализируйте файл /etc/at.allow и, если необходимо, отредактируйте его", 'recommendations')
Exemple #3
0
 def check_mask(self):
     self.result.insert('end',
                        '{text}\n\n'.format(text='Проверка текущей маски'),
                        'title')
     self.result.update()
     umask = command_seq('sudo cat /etc/login.defs | grep UMASK',
                         self.password)[0].split('\n')
     self.result.insert(
         'end', ' Текущая маска пользователя: {}\n'.format(umask[-2]))
     return
Exemple #4
0
    def checkGIDProcs(self):
        self.result.insert('end', '\n{}\n\n'.format('Анализ процессов c различными GID и EGID'), 'title')
        self.result.update()
        vulnerable = False
        egids = command_seq('sudo ps -eo egroup', self.password)[0].split('\n')
        gids = command_seq('sudo ps -eo rgroup', self.password)[0].split('\n')
        procs = command_seq('sudo ps -e')[0].split('\n')

        for i in range(1, len(egids)):
            if egids[i] != gids[i]:
                vulnerable = True
                self.result.insert('end', ' Процесс {0} имеет различные GID и EGID\n'.format(procs[i]))
        
        if vulnerable:
            self.result.insert('end', " Рекомендация:\n"
		        + " Необходимо проанализировать данные процессы и, если необходимо завершить командой pkill\n", 'recommendations')
        else:
            self.result.insert('end', " Процессы с различными GID и EGID не обнаружены\n", 'clear')
            self.result.insert('end', "\n Рекомендация: Действий не требуется\n", 'recommendations') 
Exemple #5
0
    def checkRootProcs(self):
        self.result.insert('end', '\n{}\n\n'.format('Анализ процессов, запущенных от имени root'), 'title')
        self.result.update()

        procs = command_seq("sudo ps -u root -U root u | awk '{print $2,$7,$8,$9,$10,$11}'", self.password)[0].split('\n')
        if procs != '':
            self.result.insert('end', " Процессы, запущенные от имени root:\n")
            for proc in procs:
                self.result.insert('end', '{}\n'.format(proc))
            self.result.insert('end', "Рекомендация:\n"
                + " Проанализируйте данные процессы на предмет подозрительной активности и,"
                + "если необходимо, завершите их командой pkill <Имя процесса>\n", 'recommendations')
Exemple #6
0
    def checkCrontabFiles(self):
        self.result.insert('end', '\n{}\n\n'.format('Задачи crontab'), 'title')
        self.result.update()
        vulnerable = False

        hourly = command_seq('sudo ls -1 /etc/cron.hourly', self.password)[0].replace('\n', '\n\t')
        daily = command_seq('sudo ls -1 /etc/cron.daily', self.password)[0].replace('\n', '\n\t')
        weekly = command_seq('sudo ls -1 /etc/cron.weekly', self.password)[0].replace('\n', '\n\t')
        monthly = command_seq('sudo ls -1 /etc/cron.monthly', self.password)[0].replace('\n', '\n\t')

        if hourly != '':
            vulnerable = True
            self.result.insert('end', '\n Задачи, выполняемые каждый час:\n{0}'.format('\t' + hourly))
        else:
            self.result.insert('end', '\n Задачи, выполняемые каждый час, отсутствуют\n', 'clear')

        if daily != '':
            vulnerable = True
            self.result.insert('end', '\n Задачи, выполняемые каждый день:\n{0}'.format('\t' + daily))
        else:
            self.result.insert('end', '\n Задачи, выполняемые каждый день, отсутствуют\n', 'clear')
        
        if weekly != '':
            vulnerable = True
            self.result.insert('end', '\n Задачи, выполняемые каждую неделю:\n{0}'.format('\t' + weekly))
        else:
            self.result.insert('end', '\n Задачи, выполняемые каждую неделю, отсутствуют\n', 'clear')

        if monthly != '':
            vulnerable = True
            self.result.insert('end', '\n Задачи, выполняемые каждый месяц:\n{0}'.format('\t' + monthly))
        else:
            self.result.insert('end', '\n Задачи, выполняемые каждый месяц отсутствуют\n', 'clear')
        
        if vulnerable:
            self.result.insert('end', "\n Рекомендация:\n"
		        + " Проанализируйте содержимое задач и убедитесь, что они безопасны, иначе удалите их\n", 'recommendations')
        else:
            self.result.insert('end', "\n Рекомендация: Действий не требуется\n", 'recommendations')