Доступ к информации. Внутренний аудит

в 4:02, , рубрики: информационная безопасность, Песочница, метки:

Нудное Краткое введение.

Как правило, при защите информации весь периметр безопасности строится снаружи. Наверное, логично т.к. основные угрозы идут именно оттуда. А ведь поиск уязвимостей снаружи – достаточно трудоемкое и творческое занятие, подразумевающее поиск дыр в php, SQL-иньекция, сетевые уязвимости, перебор пары миллиардов md5-хэшей и т.д.

При этом выпадает из рассмотрения возможность доступа к информации изнутри. Которая защищена как-правило значительно слабее. Видимо считается, что дыры если есть — то они все снаружи — т.к. внутри нечто монолитное и непробиваемое. Увы К счастью это не так (Информация даёт работу по обе стороны фронта). Ведь именно инсайдерская информация наиболее ценна во всех ракурсах и приобретает всё большую ценность.l

Итак. В своей небольшой статье я хочу слегка погрузить читателя в немного детский и наивный мир крупных организаций, где большинство верит в Деда Мороза слова: у нас всё очень хорошо и «кто изнутри будет ломать?».
Доступ к информации. Внутренний аудит

Ситуация:

  • Большая фирма (тысячи ПК)
  • Наличие БД и ПО собственных или сторонних разработчиков
  • Нет сквозной аутентификации между доменной учетной записью, БД и ПО. Т.е. десятки приложений – везде свой логин и пароль

Классические проблемы:

  • В лохматых программах достаточно не очевидна и сложна смена пароля. Т.е. после заведения пользователя он продолжает пользоваться выданным ему паролем. Зачастую пользователь даже считает, что ТАК И НАДО. Лично использовал приложение от одной крупнейшей корпорации мира ежедневно по многу раз, и только через 2 года нашёл диалог, с предложением сменить пароль. До этого использовал стандартный пароль «12345»
  • В больших фирмах большая текучка персонала. Ежегодная текучка в 10-30% персонала смешна для фирмы в 10, 20 или 50 человек. А если в фирме 1000 человек? Т.е. несколько сотен человек ежегодно увольняется и конечно как-правило доступ к домену блокируется. А как же другие приложения?
  • А если сотрудник не уволился, а перешел из одного подразделения в другое? Например бывший администратором домена и перешел в бизнес подразделение. Идеальный инсайдер, через которого можно получать всю интересующую информацию о фирме. Он не только знает, где лежит ключевая информация фирмы, но и как её достать
  • Сотрудник уходит в очень долгий отпуск. Все ли помнят о необходимости блокировки доступа в этих случаях?
  • Сотрудник никуда не увольняется и не переводится. Но использует в работе пароль "" (нет пароля) или «12345678»
  • Все вышеприведенные проблемы можно помножить на человеческую халатность, лень и банальную перегрузку работой кадровой службы и iT, которым и без того текучки хватает.
    В общем, итог из этого списка проблем — чем крупнее фирма, тем больше внутренних проблем в ней накапливается. Т.к. в маленьких как-правило всё завязано на домен, 1С и пары стандартных комплексов ПО

Решения (в идеальном случае)

  • обучение пользователей («смысл? обучишь – завтра уволится» — ответ менеджмента)
  • завязывать всё на домен и к доменной учетной записи (технически не всегда реализуемо, требует как-правило денег и ресурсов которые сложно обосновать)
  • избавляться от клавиатурного пароля, с привязкой к материальному носителю (сложности при использовании специализированного ПО и «железа», а так же постоянное «ой — забыл дома» и борьба с этим – прикручивание скотчем аппаратного ключа к разъему считывателя)
  • использовать «каптчу», ограничение попыток входа по числу попыток, ip-адресу и прочие творческие подходы в самописном ПО

Решения (на практике)

  • ждать инцидента – затыкать конкретную дыру
  • регулярный аудит периметра

Последний про-активный вариант, который я и хочу рассмотреть на практике. Общий алгоритм, который подойдет для большинства приложений:

  1. открываем список сотрудников
  2. открываем программу
  3. выбираем приложение для проверки
  4. вводим комбинации логинпароль пока не закончится список сотрудников и простых паролей

Доступ к информации. Внутренний аудит

Согласитесь — ничего сложного, но достаточно трудоемкий процесс если делать его руками. Даже «сладость» победы — обнаружение 1,2, ну или 100 «плохишей» не даст ровным счетом ничего. Через несколько месяцев при повторной проверке придётся перелопачивать весь список + бонус в виде новых сотрудников. Нужно автоматизировать.

Писать можно на чем угодно. Лично я копий ломать не буду — ранее такие вещи делал на Delphi и VS но после случайного знакомства со скриптовым языком AutoIT остановился на нём. Эта штука просто создана для БЫСТРОГО написании щёлкающе-вводительных универсальных утилит. Т.е. когда нет цели считать 9^9^9 комбинаций в секунду хэшей, работать с API-приложением напрямую (особенно если оно под Citrix), а достаточно по реальному списку сотрудников пощёлкать в десятке разных приложений по нескольку комбинаций пароля — милое дело.

Как простейший пример в своей статье я хочу показать пример аудита доступа к интернету в организации.

Конкретный пример

Squid-proxy. Нет никаких ограничей на подбор пароля. Т.е. можно перебирать до посинения с большой скоростью логины ещё и параллельно. Но будем честны — результат в 1 минуту или несколько дней — не имеет значения. Скорость проверки одного пароля порядка 5 секунд на одну учетную запись нас устроит. Главное — отсутствие ручного труда и пока единственная в мире программа перебирающая пароли на Proxy-сервере — достаточно для успеха. Уходя вечером с работы, запускаем, утром пожинаем результат.
Результаты сканирования в своём случае не публикую, т.к. они оказались шокирующими печальными.

; (c) lokkii
; ProxyLoginChecker v. 0.1 be<s>b</s>ta
; 1) Файл с учетными записями (passwd) из Squid нужно подложить в Win-кодировке (по дефолту КОИ-8) в корень к данной программе
; 2) Программа выдаёт два файла: out.txt в который записываются логины, имеющие дефолтный пароль, сам пароль и ФИО, а так же log.txt в который записывается текущий прогресс в виде login:time

$file_in = FileOpen("passwd", 0) ; пробуем открыть файл с логинами на чтение
If $file_in = -1 Then MsgBox(0, "Error", "Не могу открыть файл passwd") Exit EndIf

$file_out = FileOpen("out.txt", 2) ; открываем файл на ЗАПИСЬ
If $file_out = -1 Then MsgBox(0, "Error", "Не могу открыть файл out.txt") Exit EndIf

$file_log = FileOpen("log.txt", 2) ; открываем файл на ЗАПИСЬ
If $file_log = -1 Then MsgBox(0, "Error", "Не могу открыть файл log.txt") Exit EndIf

; Последовательно считывать входной файл с логинами, пока он не кончится
While 1
	$line = FileReadLine($file_in)
	if @error = -1 Then ExitLoop
	;обработка прочитанной строки из дефолтного файла squid
	;пример строки:
	;pupkin_pp:x:544:502:%Пупкин Петр Петрович:/dev/null:/dev/null
	;конечный результат:	$login = pupkin_pp
	;			$pwd = pup123
	;			$fio = Пупкин Петр Петрович
    
	$login = StringLeft($line, StringInStr($line, ":x:")-1+”_Nov-filial”); "pupkin_pp_Nov-filial"
	$pwd = StringLeft($login, 3) & “_”; “pup123"
	$line = StringTrimLeft( $line, StringInStr($line, "502:")+3 ) ; Удалить всё перед фамилией
	$line = StringTrimLeft( $line, StringInStr($line, "%")) ; Перед фамилией ещё иногда (но не всегда) встречается "%" - удалить
	$fio = StringReplace ( $line, ":/dev/null:/dev/null", "") ; Удалить часть справа
	$proxy = "192.168.0.1:8080"
	HttpSetProxy ( 2 , $proxy , $login, $pwd);
	$size = InetGetSize("http://любой сайт на котором в открытом доступе лежат файлы/файл.txt")
	if $size == 33333 then FileWriteLine($file_out, $login & ";"& $pwd & ";" & $fio & @CRLF)
	FileWriteLine($file_log, $login & ";" & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF)	
Wend

FileClose($file_in)
FileClose($file_out)
FileClose($file_log)

Выводы

Теперь можно жечь чужой трафик и лазить по порно-сайтам с ОСОБЫМ содержанием подставляя под удар своего коллегу, препятствующему карьерному росту сделать вывод о качестве паролей в целом по организации. И задуматься об организационных мерах по исправлению ситуации.
Спасибо за прочтение! Надеюсь, что статья была Вам интересна (пропущен был только исходный код), заставит задуматься и привнесёт новые идеи в Вашу работу

п.с. Я хоть и предпочитаю использовать в работе пароли типа «password», на точках доступа Wi-Fi «123456789» и т.д. Но тем не менее взываю — не делайте так!

Автор: i0t

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js