Как стать настоящим хакером или Capture The Flag
Рассказ об опыте участия в CTF (Capture The Flag - захват флага), которым поделилась аналитик информационной безопасности из компании Principal Financial Group.
Я посетила BSides Iowa, небольшую конференцию по безопасности, которая проходила в Де-Мойне, и участвовала в своем первом Capture the Flag как профессионал. До того, как вы начнете думать о больших площадках на открытом воздухе и физической нагрузке, соревнования Capture the Flag - это игры для специалистов по нарушению безопасности, которых большинство бы назвало хакерами (красная команда) и профессионалов в области информационной безопасности (синяя команда), а также всех остальных. Во время CTF игроки соревнуются друг с другом, решая задачи на своих компьютерах.
Существуют различные типы соревнований CTF, защитный стиль игры - это игровое поле и защита от атак (красная команда против синей) с активно атакующими и защищающими сетевую инфраструктуру игроками. Я сосредоточусь на защитном стиле CTF.
Как правило, этот стиль CTF делится на подкатегории (они различаются в зависимости от того, кто ведет, но есть несколько констант, таких как криптография и анализ пакетов) и каждая подкатегория содержит набор задач, которые пользователь должен решить, чтобы найти флаг. Флаг обычно представляет собой строку текста, которую пользователь вводит в игровое поле, чтобы получить свои очки. Чем больше очков стоит задача, тем труднее ее решить.
7,5 часов, тарелка картошки, 2 ломтика пиццы и две таблетки аспирина, после чего я выключила свой компьютер, получив 3,250 очков и 6-е место. Я решила держаться категории, для которой у меня было достаточно навыков. Я закончила решение всех 7 задач по Network Forensics, 2 из 8 задач, связанных с Host Forensics, и 3 из 6 задач Crypto. Многие из этих задач я решила первой, либо была в первой тройке. Не так плохо для первого CTF.
Это был хороший старт для новичка, он помог мне почувствовать свою принадлежность к сфере. Временами, особенно в технической специальности, легко стать жертвой синдрома самозванца. Этот CTF развеял все сомнения на счет моих навыков. Я знаю, что мне еще многое предстоит узнать, но я также знаю, что не притворяюсь. Также это было хорошей тренировкой для ума и помогло мне расширить мои знания по информационной безопасности. Несмотря на то, что мои фундаментальные знания увеличились незначительно, я все равно многому научилась, решая задачи, о которых не знала раньше или знала, но не знала, как их решить. Чтобы изучить новые технологии, разработчики создают приложения, с этой же целью специалисты по безопасности конкурируют друг с другом и занимаются взломами.
Настоящее удовольствие от CTF вы получаете, когда используете реальные навыки и тактики, чтобы найти флаг, и они действительно помогают (вы что-то взламываете). CTF - это ваш шанс взломать что-то легально (поскольку несанкционированный взлом крайне незаконен, и вы, вероятно, попадете в тюрьму, если вас поймают). Давайте рассмотрим несколько задач, которые были на BSides Iowa SecDSM CTF
Crypto
Одной из наиболее интересных криптографических задач была проблема стеганографии. Стеганография - это скрытие секретного сообщения в другом файле (например, изображении). Это довольно распространенная задача, встречающаяся в соревнованиях CTF. В сети доступно множество инструментов для обнаружения сообщения, скрытого в файле изображения, а также инструментов для извлечения этих сообщений.
Стеганографическая задача
Эта картинка выглядит абсолютно обычной? Но если мы посмотрим на командную строку:
$ file Words-Have-Power.jpg
Words-Have-Power.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, progressive, precision 8, 849x578, frames 3
Ничего особенного... давайте попробуем hexdump:
$ hexdump -C Words-Have-Power.jpg
Оно возвращает кучу вывода, который я не буду вставлять сюда, но вот соответствующие биты:
0000a580 00 00 00 1e 00 00 00 08 00 00 00 66 6c 61 67 2e |...........flag.|
0000a590 74 78 74 7d fa c9 4c 8f fb d4 5e 8d 43 86 1f 63 |txt}..L...^.C..c|
0000a5a0 f9 f5 dd 12 d0 9d c7 e1 1d 50 5b 26 a5 32 7e ad |.........P[&.2~.|
0000a5b0 94 04 3e a1 27 3b d4 e5 7f a4 f6 45 43 50 4b 01 |..>.';.....ECPK.|
0000a5c0 02 3f 03 14 03 01 00 00 00 bc 0c 94 4a 21 ff 41 |.?..........J!.A|
0000a5d0 1a 2a 00 00 00 1e 00 00 00 08 00 24 00 00 00 00 |.*.........$....|
0000a5e0 00 00 00 20 80 a4 81 00 00 00 00 66 6c 61 67 2e |... .......flag.|
0000a5f0 74 78 74 0a 00 20 00 00 00 00 00 01 00 18 00 80 |txt.. ..........|
0000a600 63 53 a4 a0 b9 d2 01 80 70 f5 17 a1 b9 d2 01 80 |cS......p.......|
0000a610 63 53 a4 a0 b9 d2 01 50 4b 05 06 00 00 00 00 01 |cS.....PK.......|
0000a620 00 01 00 5a 00 00 00 50 00 00 00 00 00 |...Z...P.....|
Теперь мы знаем, что флаг находится в текстовом файле и по последней строке мы можем сказать, что в jpg есть скрытый файл.
Если мы попытаемся распаковать его:
$ unzip Words-Have-Power.jpg
Archive: Words-Have-Power.jpg
warning [Words-Have-Power.jpg]: 42349 extra bytes at beginning or within zipfile
(attempting to process anyway)
[Words-Have-Power.jpg] flag.txt password:
Теперь у нас есть подсказка для пароля. Если мы попробуем использовать «wordshavepower» (слова на изображении):
$ unzip Words-Have-Power.jpg
Archive: Words-Have-Power.jpg
warning [Words-Have-Power.jpg]: 42349 extra bytes at beginning or within zipfile
(attempting to process anyway)
[Words-Have-Power.jpg] flag.txt password:
extracting: flag.txt
Потрясающе! Давайте посмотрим с чем этот файл:
$ cat flag.txt
flag{not_stego_not_even_once}
Cipher Challenge
Еще одна из задач - челлендж по шифрованию для декодирования:
pcyv {mvac_flt_bg_kdzja_xoksvp_iaof_u4}
Сперва, я подумала, что это может быть шифр Цезаря, но нет. Следующий самый популярный шифр - это шифр Виженера. Гуглим и:
Другие задачи в этой категории требовали перевода из двоичной системы, Base64, Base32 или Base16 в ascii или дешифрирования файла, зашифрованного с помощью AES.
Host Forensics
Для решения задач, нужно было, чтобы игрок загрузил дамп MS Host и проанализировал его, а затем узнал имя запущенного вредоносного ПО и адрес, и порт C2 (Command & Control).
Эта конкретная категория была самой близкой мне. Я никогда не занималась экспертизой на компьютере под управлением Windows, но Google - друг каждого. Я обнаружила, что могу использовать инструмент командной строки, называемый Volatility, для анализа дампа и поиска флагов.
После загрузки файла я запустила команду file
, чтобы лучше понять то, что я искала, потому что, если вы попытаетесь просто cat
файл, вы получите кучу мусора.
$ file memory.dmp
memory.dmp: MS Windows 64bit crash dump, full dump, 2097152 pages
Я никогда не работала с аварийной дамп, но поиск в Google привел меня к Volatility и командам, которые мне нужно было запускать. (еще я нашла запись с другого CTF с похожим заданием).
Я начала с просмотра сетевых подключений в дампе. Так я знала, что, возможно, смогу определить соединение для ботнета C2.
Я заметила, что серверу был предоставлен странный внешний IP-адрес с несколькими исходящими соединениями. Я отфильтровала этот IP и начала искать подключения к нестандартному порту (в этом случае не к порту 80 или 433, потому что это веб-порты и обычно не используются для управления бот-сетью).
$ volatility -f memory.dmp --profile=Win7SP1x64 netscan | grep 10.0.10.103
Volatility Foundation Volatility Framework 2.5
0x23d43aec0 UDPv4 10.0.10.103:138 *:* 4 System 2017-04-21 19:18:49 UTC+0000
0x23d472ec0 UDPv4 10.0.10.103:137 *:* 4 System 2017-04-21 19:18:49 UTC+0000
0x23da11b40 UDPv4 10.0.10.103:1900 *:* 2292 svchost.exe 2017-04-21 19:20:47 UTC+0000
0x23f434690 UDPv4 10.0.10.103:68 *:* 904 svchost.exe 2017-04-21 19:35:12 UTC+0000
0x23f21f880 TCPv4 10.0.10.103:49662 174.127.99.252:4576 CLOSED -1
0x23f471010 TCPv4 10.0.10.103:49682 98.139.199.205:443 CLOSED -1
0x23fdbe3b0 TCPv4 10.0.10.103:139 0.0.0.0:0 LISTENING 4 System
0x23f91c010 TCPv4 10.0.10.103:49665 165.254.114.16:80 CLOSED -1
0x23faa0cd0 TCPv4 10.0.10.103:49698 63.250.200.63:443 CLOSED -1
Единственный вариант - 174.127.99.252:4576
, и он оказался верным.
Следующей задачей было точно определить вредоносное ПО, заразившее систему. Я использовала strings
для поиска по дампу и отфильтровала IP адреса для C2, потому что знала, что IP-адрес определенно привязан к вредоносному ПО.
$ strings -d memory.dmp | grep '174.127.99.252' | more -5
{"NETWORK":[{"PORT":4576,"DNS":"174.127.99.252"}],"INSTALL":true,"MODULE_PATH":"Ns/k/Erc.R","PLUGIN_FOLDER":"fDNTvmjCywD","JRE_FOLDER":"KRBDYF","JAR_FOLDER":"
HfItRcGAvMp","JAR_EXTENSION":"JFKuuO","ENCRYPT_KEY":"mZWoFgfReBJIoLFLZKsOOIaqn","DELAY_INSTALL":2,"NICKNAME":"User","VMWARE":true,"PLUGIN_EXTENSION":"TvEXt","
WEBSITE_PROJECT":"https://jrat.io","JAR_NAME":"kpjCTotwwxd","SECURITY":[{"REG":[{"VALUE":"\"SaveZoneInformation\"=dword:00000001\r\n","KEY":"[HKEY_CURRENT_USE
R\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Attachments]"},{"VALUE":"\"LowRiskFileTypes\"=\".avi;.bat;.com;.cmd;.exe;.htm;.html;.lnk;.mpg;.mpeg
;.mov;.mp3;.msi;.m3u;.rar;.reg;.txt;.vbs;.wav;.zip;.jar;\"\r\n","KEY":"[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Association
Из этого я поняла, что вредоносное ПО называется jrat.io
и что это также флаг. Я начала работать в этой категории чуть позже в тот же день. Хотелось бы, чтобы у меня было больше времени, чтобы попытаться решить другие задачи, потому что я думаю, что смогла бы их решить. Две вышеперечисленные задачи стоили больше всего очков в категории Host Forensics.
Network Forensics
Эта категория, где я чувствовала себя как дома. Пакетный анализ - основная часть моей повседневной жизни. Задачи в этой категории были связаны с тремя основными темами: фишинг, вымогательство и heartbleed. Чтобы решить задачи в этой категории, игроку нужны: Wireshark и знание анализа пакетов и сетей.
Я покажу сложную задачу. Нам пришлось загрузить файл pcap и единственным словом в его описании было «сломан».
Heartbleed
Глядя на pcap в Wireshark, я знала, что это будет атака с heartbleed из-за запросов и ответов, похожих на сердечный ритм. Я посмотрела, как работает heartbleed, и мне стало понятно, где искать. (Посмотрите графическое объяснение, которое я нашла)
Если вы посмотрите heartbleed вывод и скопируете Payload как текст, то в итоге обнаружите:
SC[r+H9
w3f
"!985
32ED/A I
42
#ge: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Length: 28
Pragma: no-cache
Cache-Control: no-cache
bsides={heartbleed_for_life}kYV<V4
и bsides = {heartbleed_for_life}
- это флаг.
Попробуйте
Если вы дошли до этого момента, и я не потеряла вас где-нибудь в дампе Microsoft, возможно, вам нужно поучаствовать в Capture the Flag. Существует много CTF для начинающих. Также есть много CTF, специально для веб-разработчиков. Знание способа защиты приложения от внешних угроз для разработчика - бесценно. Если вы заинтересованы этой темой, но не хотите соревноваться, ознакомьтесь с некоторыми из этих сайтов:
- CTFLearn
- HackThisSite
- Список сайтов для практики
- Инструменты и источники для подготовки к CTF от института Infosec
Интересны утилиты командной строки, которые я использовала?
Я выполнила большинство задач на Ubuntu 16.04 Digital Ocean Droplet.
Если вам особенно интересна разработка веб-приложений, то предлагаю попробовать WebGoat. Я использовала его, чтобы продемонстрировать атаки SQL Injection для презентации группе студентов, и его было довольно легко настроить и использовать.