• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья BMC/IPMI/IP-KVM: удобное управление сервером или "железный" бэкдор. [ОСТОРОЖНО, 25 МБ КАРТИНОК!]

Есть в этом смысл? Если условно получили некий ip адрес злоумышленника и повели цепочку дальше - вышли на ip сервера в дата центре, поняли что это очередное промежуточное звено, запросили логи входящих-исходящих ip на сервере у оператора связи и пошли дальше. Зачем им физический доступ к серверу?
ты не понял суть темы - она не про поиск кибержуликов ментами.
я исследую возможности хостера (то есть сотрудника датацентра) сливать данные или запихивать своё добро в сервера, находящиеся в датацентре. у хостера, очевидно, есть постоянный физический доступ к любому серверу - хоть его собственному, который он сдаёт в аренду, хоть к клиентскому, который привезли на colocation.
 
there are the following files in Supermicro's published archive "x11_release_20200413.tar.gz"

Код:
BootLoader/Host/AST2500/u-boot-2013.01$ find . -iname "*dts*"
./dts
./drivers/net/fm/dtsec.c
./board/toradex/dts
./board/toradex/dts/tegra20-colibri_t20_iris.dts
./board/samsung/dts
./board/samsung/dts/exynos5250-smdk5250.dts
./board/compulab/dts
./board/compulab/dts/tegra20-trimslice.dts
./board/compal/dts
./board/compal/dts/tegra20-paz00.dts
./board/xilinx/dts
./board/xilinx/dts/microblaze.dts
./board/xilinx/microblaze-generic/dts
./board/xilinx/microblaze-generic/dts/microblaze.dts
./board/avionic-design/dts
./board/avionic-design/dts/tegra20-medcom-wide.dts
./board/avionic-design/dts/tegra20-tec.dts
./board/avionic-design/dts/tegra20-plutux.dts
./board/nvidia/dts
./board/nvidia/dts/tegra20-ventana.dts
./board/nvidia/dts/tegra20-harmony.dts
./board/nvidia/dts/tegra20-seaboard.dts
./board/nvidia/dts/tegra20-whistler.dts
./board/chromebook-x86/dts
./board/chromebook-x86/dts/link.dts
./board/chromebook-x86/dts/alex.dts
./arch/powerpc/include/asm/fsl_dtsec.h
./arch/arm/dts
./arch/arm/dts/tegra20.dtsi
./arch/arm/dts/exynos5250.dtsi
./arch/arm/dts/skeleton.dtsi
./arch/x86/dts
./arch/x86/dts/skeleton.dtsi
./arch/x86/dts/coreboot.dtsi
but no .dts for the ASPEED CPU used on Supermicro boards.

Код:
BootLoader/Host/AST2500/u-boot-2013.01$ tree -h board/aspeed/
board/aspeed/
├── [  60]  ast1500
│   └── [ 16K]  platform.S
├── [  60]  ast2050
│   └── [ 10K]  platform.S
├── [  60]  ast2100
│   └── [ 13K]  platform.S
├── [  60]  ast2150
│   └── [ 16K]  platform.S
├── [ 100]  ast-g3
│   ├── [2.2K]  ast2300.c
│   ├── [1023]  Makefile
│   └── [ 85K]  platform.S
├── [ 120]  ast-g4
│   ├── [7.8K]  ast-g4.c
│   ├── [1.1K]  Makefile
│   ├── [7.6K]  platform_fpga.S
│   └── [ 85K]  platform.S
├── [ 380]  ast-g5
│   ├── [ 21K]  ast_aes.c
│   ├── [ 12K]  ast_crypto.c
│   ├── [1001]  ast_crypto.h
│   ├── [3.6K]  ast-g5.c
│   ├── [ 15K]  ast_gpio.c
│   ├── [1.2K]  ast_gpio.h
│   ├── [ 27K]  ast-kcs.c
│   ├── [ 15K]  ast_pwm.c
│   ├── [8.3K]  ast_pwm.h
│   ├── [ 687]  ast_uart.c
│   ├── [ 116]  ast_uart.h
│   ├── [1.7K]  Makefile
│   ├── [9.3K]  platform_armsim2.S
│   ├── [ 23K]  platform_fpga_ecc.S
│   ├── [ 22K]  platform_fpga.S
│   ├── [ 72K]  platform.S
│   └── [7.4K]  smci-espi.c
└── [  80]  common
    ├── [4.5K]  fpga1_platform.S
    └── [7.5K]  fpga2_platform.S

8 directories, 30 files

will search further.
strange --> not normal --> but not much surprising as well
--> look inside U-Boot config header files + inside platform.S + ast*.c files inside board/aspeed/ --> inside normally there will be board init + configs --> SPI + MTD details
not just *dts*, eat through such entire U-Boot dir --> references to spi0.0
perhaps you can bypass dts search --> directly to spi node
 
strange --> not normal --> but not much surprising as well
--> look inside U-Boot config header files + inside platform.S + ast*.c files inside board/aspeed/ --> inside normally there will be board init + configs --> SPI + MTD details
not just *dts*, eat through such entire U-Boot dir --> references to spi0.0
perhaps you can bypass dts search --> directly to spi node
I've found something, however not in UBoot sources but in Linux kernel sources (linux-3.18.tar.gz archive inside Kernel/Host/AST2500/):

Kernel/Host/AST2500/arch/arm/plat-aspeed/dev-spi.c

Код:
static struct mtd_partition ast_spi_flash0_partitions[] = {
  {
    .name = "u-boot",
    .offset   = 0,
    .size   = 0x80000,
    .mask_flags = MTD_WRITEABLE,
  }, {
    .name = "env",
    .offset   = 0x60000,
    .size   = 0x20000,
  }, {
    .name     = "kernel",
    .offset   = 0x80000,
    .size     = 0x200000,
  }, {
    .name     = "rootfs",
    .offset   = 0x300000,
    .size     = 0x500000,
  }, {
    .name = "data0",
    .offset   = MTDPART_OFS_APPEND,
    .size   = MTDPART_SIZ_FULL,
  },
};

...

static struct mtd_partition ast_spi_flash1_partitions[] = {
  {
    .name = "bios",
    .offset   = 0,
    .size   = MTDPART_SIZ_FULL,
  },
};

however it gets replaced at build time by the patch "009-disable_platform_drivers.patch"

Код:
....

--- lii/arch/arm/plat-aspeed/dev-spi.c  2015-04-24 14:39:34.000000000 +0800
+++ li/arch/arm/plat-aspeed/dev-spi.c 2017-08-01 17:08:12.054497199 +0800
@@ -258,56 +258,70 @@
 #endif //CONFIG_SPI_AST

 static struct mtd_partition ast_spi_flash0_partitions[] = {
- {
-   .name = "u-boot",
-   .offset   = 0,
-   .size   = 0x80000,
-   .mask_flags = MTD_WRITEABLE,
- }, {
-   .name = "env",
-   .offset   = 0x60000,
-   .size   = 0x20000,
- }, {
-   .name     = "kernel",
-   .offset   = 0x80000,
-   .size     = 0x200000,
- }, {
-   .name     = "rootfs",
-   .offset   = 0x300000,
-   .size     = 0x500000,
- }, {
-   .name = "data0",
-   .offset   = MTDPART_OFS_APPEND,
-   .size   = MTDPART_SIZ_FULL,
- },
+    {
+        .name = "bootloader",
+        .size = BOOTLOADER_SIZE,
+        .offset = BOOTLOADER_OFFSET,
+    },{
+        .name = "nvram",
+        .size = NVRAM_BLOCK_SIZE,
+        .offset = NVRAM_BLOCK_OFFSET,
+        //.mask_flags = MTD_WRITEABLE,
+    },{
+        .name = "rootFS",
+        .size = ROOTFS_SIZE,
+        .offset = ROOTFS_OFFSET,
+    },{
+        .name = "kernel",
+        .size = KERNEL_SIZE,
+        .offset = KERNEL_OFFSET,
+    },{
+        .name = "webpage",
+        .size = WEBFS_SIZE,
+        .offset = WEBFS_OFFSET,
+    },{
+        .name = "all_part",
+        .size = ALL_PART_SIZE,
+        .offset = ALL_PART_OFFSET,
+    },{
+        .name = "uboot_env",
+        .size = BOOTLOADER_ENV_SIZE,
+        .offset = BOOTLOADER_ENV_OFFSET,
+    }
 };
 
 ....

but still nothing about spi0.0
 
I've found something, however not in UBoot sources but in Linux kernel sources (linux-3.18.tar.gz archive inside Kernel/Host/AST2500/):

Kernel/Host/AST2500/arch/arm/plat-aspeed/dev-spi.c

Код:
static struct mtd_partition ast_spi_flash0_partitions[] = {
  {
    .name = "u-boot",
    .offset   = 0,
    .size   = 0x80000,
    .mask_flags = MTD_WRITEABLE,
  }, {
    .name = "env",
    .offset   = 0x60000,
    .size   = 0x20000,
  }, {
    .name     = "kernel",
    .offset   = 0x80000,
    .size     = 0x200000,
  }, {
    .name     = "rootfs",
    .offset   = 0x300000,
    .size     = 0x500000,
  }, {
    .name = "data0",
    .offset   = MTDPART_OFS_APPEND,
    .size   = MTDPART_SIZ_FULL,
  },
};

...

static struct mtd_partition ast_spi_flash1_partitions[] = {
  {
    .name = "bios",
    .offset   = 0,
    .size   = MTDPART_SIZ_FULL,
  },
};

however it gets replaced at build time by the patch "009-disable_platform_drivers.patch"

Код:
....

--- lii/arch/arm/plat-aspeed/dev-spi.c  2015-04-24 14:39:34.000000000 +0800
+++ li/arch/arm/plat-aspeed/dev-spi.c 2017-08-01 17:08:12.054497199 +0800
@@ -258,56 +258,70 @@
 #endif //CONFIG_SPI_AST

 static struct mtd_partition ast_spi_flash0_partitions[] = {
- {
-   .name = "u-boot",
-   .offset   = 0,
-   .size   = 0x80000,
-   .mask_flags = MTD_WRITEABLE,
- }, {
-   .name = "env",
-   .offset   = 0x60000,
-   .size   = 0x20000,
- }, {
-   .name     = "kernel",
-   .offset   = 0x80000,
-   .size     = 0x200000,
- }, {
-   .name     = "rootfs",
-   .offset   = 0x300000,
-   .size     = 0x500000,
- }, {
-   .name = "data0",
-   .offset   = MTDPART_OFS_APPEND,
-   .size   = MTDPART_SIZ_FULL,
- },
+    {
+        .name = "bootloader",
+        .size = BOOTLOADER_SIZE,
+        .offset = BOOTLOADER_OFFSET,
+    },{
+        .name = "nvram",
+        .size = NVRAM_BLOCK_SIZE,
+        .offset = NVRAM_BLOCK_OFFSET,
+        //.mask_flags = MTD_WRITEABLE,
+    },{
+        .name = "rootFS",
+        .size = ROOTFS_SIZE,
+        .offset = ROOTFS_OFFSET,
+    },{
+        .name = "kernel",
+        .size = KERNEL_SIZE,
+        .offset = KERNEL_OFFSET,
+    },{
+        .name = "webpage",
+        .size = WEBFS_SIZE,
+        .offset = WEBFS_OFFSET,
+    },{
+        .name = "all_part",
+        .size = ALL_PART_SIZE,
+        .offset = ALL_PART_OFFSET,
+    },{
+        .name = "uboot_env",
+        .size = BOOTLOADER_ENV_SIZE,
+        .offset = BOOTLOADER_ENV_OFFSET,
+    }
 };
 
 ....

but still nothing about spi0.0
Внутри u-boot-2013.01/include/fdt.h определен заголовок, есть вариант попробовать по заголовку в бинарнике поискать.

Код:
#define FDT_MAGIC    0xd00dfeed    /* 4: version, 4: total size */
#define FDT_TAGSIZE    sizeof(uint32_t)

#define FDT_BEGIN_NODE    0x1        /* Start node: full name */
#define FDT_END_NODE    0x2        /* End node */
#define FDT_PROP    0x3        /* Property: name off,
                       size, content */

#define FDT_NOP        0x4        /* nop */
#define FDT_END        0x9

u-boot-2015.01, по-умолчанию, dtb записывался в начало раздела reserved, эта секция определялась сразу после раздела bootloader

Есть еще вариант попробовать в секции переменных окружения(uboot_env) посмотреть FDT_ADDR или что-то похожее. Конечно, если блоб не упакова вместе с ядром в FIT.
 
У меня просто есть одна проблема, когда я определяю в dts mtd разделы - сам u-boot их прекрастно видит и я могу загрузить рамдиск, но внутри рамдиска /proc/device-tree/mtd уже показыват только те разделы, которые определены в заголовочниках самого убута.

Есть несколько путей решения, один из которых мне не очень по душе, как сказал коллега выше - определить их через bootargs, мне это решение не очень нравиться. Вот мне и интересно, как уважающие себя люди справляются с этой проблемой :)
 
У меня просто есть одна проблема, когда я определяю в dts mtd разделы - сам u-boot их прекрастно видит и я могу загрузить рамдиск, но внутри рамдиска /proc/device-tree/mtd уже показыват только те разделы, которые определены в заголовочниках самого убута.

Есть несколько путей решения, один из которых мне не очень по душе, как сказал коллега выше - определить их через bootargs, мне это решение не очень нравиться. Вот мне и интересно, как уважающие себя люди справляются с этой проблемой :)
ну это точно не ко мне, я весьма далёк от разработки под эмбеддед. но таковые разработчики тут обитают, создай топик в этом разделе или в "Администрирование" (и/или проголосуй за отдельный раздел тут https://xss.pro/threads/26727/post-669896 )


я весьма далёк от разработки под эмбеддед
->
я пытался запустить qemu даже с опубликованными mtd, но так и не осилил.
*c опубликованными dtb, используя информацию отсюда https://www.qemu.org/docs/master/system/arm/aspeed.html
и всё равно не осилил, в результате тестирую своё скомпилированное добро на реальном железе, а не в виртуалке, как нормальные люди :D
 
Последнее редактирование:
d00dfeed
не нашёл, как и edfe0dd0
Есть еще вариант попробовать в секции переменных окружения(uboot_env) посмотреть FDT_ADDR или что-то похожее. Конечно, если блоб не упакова вместе с ядром в FIT.
в разделе bootloader_env ничего интересного

bootloader_env.png

дальше до конца файла нули.
 
- приветствие прописалось. а это значит, что хостер может добавить какой-нибудь полезный javascript для выполнения кода в браузере клиента ;)
PoC давно сделал, а прикрепить к посту забыл.
один из примеров полезного javascript кода: перехват нажимаемых клавиш в Web-интерфейсе KVM (например, для того, чтобы узнать пароль шифрования диска)

для дебага вывожу перехваченные клавиши в консоль браузера:

web.png


а пишутся все перехваченные клавиши в оперативную память BMC:

bmc.png
 
PoC давно сделал, а прикрепить к посту забыл.
один из примеров полезного javascript кода: перехват нажимаемых клавиш в Web-интерфейсе KVM (например, для того, чтобы узнать пароль шифрования диска)

для дебага вывожу перехваченные клавиши в консоль браузера:

Посмотреть вложение 70405

а пишутся все перехваченные клавиши в оперативную память BMC:

Посмотреть вложение 70406
Самое веселое будет дальше, если посмотреть в сторону netboot, ALPHV используют iso образ alpine с тулзами

Продолжу мысль, помимо бекконнекта и записи нажатий, можно через netboot подгрузить что-то что модифицирует всё что душе угодно, сделав это максимально быстро.
 
Последнее редактирование:
Самое веселое будет дальше, если посмотреть в сторону netboot, ALPHV используют iso образ alpine с тулзами

Продолжу мысль, помимо бекконнекта и записи нажатий, можно через netboot подгрузить что-то что модифицирует всё что душе угодно, сделав это максимально быстро.

ребут сервера - это палево, намного интереснее прямой доступ к оперативной памяти сервера из BMC, т.к. это никак не детектится и не требует ребута.
 
а если диск расшифровывается по ссш ? с помощью дропбиир
то придётся всё-таки грузиться с iso и подменять бинарник dropbear или cryptsetup на свой.
вы же не шифруете раздел /boot ? :)

а если с BMC есть доступ к оперативной памяти самого сервера, то можно воспользоваться утилитой findaes, как показано здесь: https://xss.pro/threads/98554/
 
Пожалуйста, обратите внимание, что пользователь заблокирован
то придётся всё-таки грузиться с iso и подменять бинарник dropbear или cryptsetup на свой.
вы же не шифруете раздел /boot ? :)

а если с BMC есть доступ к оперативной памяти самого сервера, то можно воспользоваться утилитой findaes, как показано здесь: https://xss.pro/threads/98554/

спасибо, в общем беда прям какая то
кстати недавно столкнулись с изъятием серверов которые якобы были в ру
и вдруг оказались в Риге )

присоединюсь тоже к теме, будем изучать как обойти это
 
то придётся всё-таки грузиться с iso и подменять бинарник dropbear или cryptsetup на свой.
вы же не шифруете раздел /boot ? :)
посмотри на эти проекты, не хочу лишних слов лить что зачем и почему, ты и сам должен понять u-root

Но касательно второй репы добавлю, это воркер, таски берет из yml, что мне нравится с помощью embed встраиваю в него те самые описания (TTP) для последующей атаки и шифрую эти самые строки, за чем это делаю думаю не стоит объяснять))) По итогу прекрасные devops инструменты служат верой и правдой во имя зла: max
В yml можно описать целые графы, какой таск за каким будет идти, что делать при ошибке и тд, данный проект дал как пример, можно найти более годные проекты на гите и использовать в своих исследовательских целях =D

Упд: испытываю слабость и особый трепет когда используются легитимные и безобидные тулзы во имя зла
 
спасибо, в общем беда прям какая то
кстати недавно столкнулись с изъятием серверов которые якобы были в ру
и вдруг оказались в Риге )

присоединюсь тоже к теме, будем изучать как обойти это
Сервера держать в подвале или на съемных квартирах, выходные сервера пусть выступают всего лишь прокси.
В квартиру поставить камеру и подрубить её по левому wifi с другого дома и второй канал использовать 4g, если произошла детекция движений выключать сервера.
Сами сервера не должны иметь дисков как таковых, но при перезагрузке должны монтировать nfs шару и после монтирования должны стартовать сервисы что вы держите на данных серверах, шара может лежать в tor а подключение к шаре через мультиканальное подключение состоящее из множества процессов tor и балансера вот как пример metasocks. Go-MultiTor
 
кстати недавно столкнулись с изъятием серверов которые якобы были в ру
и вдруг оказались в Риге )
это классика антиабузных хостеров, IP из "Ливана" и "Ирана" анонсируются в Нидерландах :D перед заказом сервера нужно просить у хостера пример IP и проверять трассировку до него.

посмотри на эти проекты, не хочу лишних слов лить что зачем и почему, ты и сам должен понять u-root
спасибо, посмотрю на досуге.

Но касательно второй репы добавлю, это воркер, таски берет из yml, что мне нравится с помощью embed встраиваю в него те самые описания (TTP) для последующей атаки и шифрую эти самые строки, за чем это делаю думаю не стоит объяснять))) По итогу прекрасные devops инструменты служат верой и правдой во имя зла: max
В yml можно описать целые графы, какой таск за каким будет идти, что делать при ошибке и тд, данный проект дал как пример, можно найти более годные проекты на гите и использовать в своих исследовательских целях =D
кажется, ты перепутал топик с https://xss.pro/threads/102238/
 
это классика антиабузных хостеров, IP из "Ливана" и "Ирана" анонсируются в Нидерландах :D перед заказом сервера нужно просить у хостера пример IP и проверять трассировку до него.


спасибо, посмотрю на досуге.


кажется, ты перепутал топик с https://xss.pro/threads/102238/
Воркер в "iso" так что нет
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх