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
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')
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
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')
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')
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')