admin 11 июня 2017

Как стать настоящим хакером или 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, специально для веб-разработчиков. Знание способа защиты приложения от внешних угроз для разработчика - бесценно. Если вы заинтересованы этой темой, но не хотите соревноваться, ознакомьтесь с некоторыми из этих сайтов:

Интересны утилиты командной строки, которые я использовала?

Я выполнила большинство задач на Ubuntu 16.04 Digital Ocean Droplet.
Если вам особенно интересна разработка веб-приложений, то предлагаю попробовать WebGoat. Я использовала его, чтобы продемонстрировать атаки SQL Injection для презентации группе студентов, и его было довольно легко настроить и использовать.

Другие стать по теме

6 книг, которые рассказывают об этичном хакинге

10 лучших инструментов для хакинга в 2017 году

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ