Ха­керам Saber и cyb0rg уда­лось успешно ата­ковать учас­тни­ка северо­корей­ской шпи­онской хак­груп­пы Kimsuky. Отчет об этом они опуб­ликова­ли в новей­шем номере жур­нала Phrack. Из этой статьи ты узна­ешь, как про­ходи­ла ата­ка, какой код и дан­ные извлек­ли с рабочей стан­ции, при­над­лежащей северо­корей­ско­му хакеру.

Да­лее — близ­кий к тек­сту перес­каз статьи Saber и cyb0rg из бумаж­ной вер­сии Phrack, под­готов­ленной для DEF CON. Этот матери­ал дос­тупен без плат­ной под­писки.

Kimsuky — это под­держи­ваемая пра­витель­ством КНДР хакер­ская груп­па типа Advanced Persistent Threat (APT), нацелен­ная на шпи­онаж за ана­лити­чес­кими цен­тра­ми, пред­при­ятиями, опе­рато­рами атом­ных элек­трос­танций и пра­витель­ствен­ными струк­турами. Она вне­сена в спи­сок в соот­ветс­твии с ука­зом E. O. 13687 как агентство, инс­тру­мент или под­кон­троль­ная струк­тура пра­витель­ства КНДР.

Мы будем называть это­го кон­крет­ного учас­тни­ка прос­то KIM — так короче. И KIM тебе не друг!

В дам­пе наш­лось немало бэк­доров и инс­тру­мен­тов Kimsuky, а заод­но и внут­ренняя докумен­тация. Из нее вид­но, что Kimsuky без стес­нения работа­ет в паре с китай­ски­ми APT-груп­пами, обме­нива­ясь инс­тру­мен­тами и при­ема­ми.

Не­кото­рые из этих инс­тру­мен­тов тебе, воз­можно, уже встре­чались: ты видел их ска­неры, находил сер­верные арте­фак­ты и имплан­ты. А теперь в при­дачу получишь их кли­енты, докумен­тацию, пароли, исходни­ки и коман­дные фай­лы.

И, что­бы жизнь казалась сла­ще, мы под­кинули бонус — бэкап VPS, с которо­го чле­ны груп­пиров­ки запус­кали ата­ки с тар­гетиро­ван­ным фишин­гом.

 

Дампы

Да­вай крат­ко про­бежим­ся по содер­жимому дам­пов, а потом раз­берем основные наход­ки.

Итак, сре­ди инте­рес­ного:

  • ло­ги, фик­сиру­ющие ата­ку на Коман­дование воен­ной конт­рраз­ведки;
  • дос­туп к Минис­терс­тву инос­тран­ных дел Южной Кореи;
  • дос­туп к внут­ренней сети пра­витель­ства Южной Кореи
  • …и еще куча фай­лов, до которых мы пока не доб­рались.

Пер­вый дамп — с гос­тевой вир­туал­ки KIM, вто­рой — с его пуб­лично­го VPS. Оба были получе­ны при­мер­но 10 июня 2025 года.

Из занят­ного:

  • Скрин­шот его рабоче­го сто­ла (kim_desktop.jpg).
  • Linux Dev System (VM на Deepin 20.9 Linux).
  • Гос­тевая VM име­ла при­мон­тирован­ный диск хос­та C:\ (через HGFS). Дамп при­лага­ется.
  • Спи­сок всех фай­лов лежит в ./file-lists.
  • Око­ло 20 тысяч записей в исто­рии Brave и Chrome — с кучей email-адре­сов (jeder97271@wuzak.com, xocaw75424@weiby.com и так далее), сай­тов, которые посещал KIM, и инс­тру­мен­тов, которые он ска­чивал.
  • Все рас­ширения Chrome: для под­мены User-Agent, Proxy SwitchyOmega, Cookie Editor и мно­жес­тво дру­гих.
  • Файл ko图文编译.doc — это инс­трук­ция по экс­плу­ата­ции одно­го из бэк­доров. Там даже есть офи­циаль­но зву­чащее пре­дуп­режде­ние (перевод): «Зап­рещено исполь­зовать бэк­дор не по наз­начению».
  • В mnt/hgfs/Desktop/fish_25327/vps20240103.docx — куча паролей, вклю­чая рабочие пароли к поч­те и VPS.
  • Мо­ре паролей — в mnt/hgfs/Desktop/fish_25327/vps20240103.docx. Там находят­ся как рабочие email, так и пароли к VPS:
    • root: 1qaz2wsx;
    • dysoni91@tutamail.com: !QAZ4rfv!@#$;
    • https://sg24.vps.bz:4083/center2025a@tutamail.com: H4FHKMWMpX8bZ;
    • https://monovm.com/dysoni91@tutamail.com: dr567h%a"G6*m.
  • Из fish-url.txt и generator.php ты узна­ешь сек­реты пов­торя­ющих­ся пат­тернов паролей.

Второй дамп

  • Имя сер­вера: vps1735811325, раз­мещен на vps.bz.
  • Этот сер­вер учас­тво­вал в целевых фишин­говых ата­ках.
  • При­меча­тель­ны SSL-сер­тифика­ты и auth.log. Под­робнее о сор­цах фишин­говых атак — ниже.
 

Командование военной контрразведки (dcc.mil.kr)

  • Где лежит: vps/var/www/html/

Ко­ман­дование воен­ной конт­рраз­ведки (DCC) — это раз­ведыва­тель­ная орга­низа­ция Воору­жен­ных сил Южной Кореи. Глав­ная мис­сия DCC — ковар­ные и тай­ные опе­рации, а так­же конт­рраз­ведка.

Ло­ги показы­вают, что все­го три дня назад была фишин­говая ата­ка на dcc.mil.kr.

В тех же логах зас­ветились The Supreme Prosecutor Office (spo.go.kr), korea.kr, daum.net, kakao.com и naver.com. Обра­ти вни­мание, что Admin-C для dcc.mil.kr зарегис­три­рован на hyuny1982@naver.com.

grep -Fhr 'doc.mil.kr' 1og | uniq
jandy3912@dcc.mil.kr_amFuZHkzOTEyQGRjYy5taWwua3I=
di031111@dcc.mil.kr_ZGkwMzExMTFAZGNjLm1pbC5rcg==
didcdba@dcc.mil.kr_ZG1kY2RiYUBkY2MubWlsLmty
jhcgod88@dcc.mil.kr_amhjZ29k0DhAZGNjLm1pbC5rcg==
chanchan0616@dcc.mil.kr_Y2hhbmNoYW4wNjE2QGRjYy5taWwua3I=
yib100@dcc.mil.kr_eWliMTAwQGRjYy5taWwua3I=
Dsc808@dcc.mil.kr_RHNjODA4QGRjYy5taWwua3I=
...
 

Доступ в хранилище МИД Южной Кореи

Ко­пия плат­формы элек­трон­ной поч­ты Минис­терс­тва инос­тран­ных дел Южной Кореи лежала в фай­ле с наз­вани­ем mofa.go.kr.7z. Похоже, исходни­ки ста­щили сов­сем недав­но.

1923 Apr 1 07:15 .gitignore
96 Apr 1 07:15. gitmodules
4096 Apr 1 07:15 kebi-batch/
4096 Apr 1 07:15 kebi-core/
4096 Apr 1 07:15 kebi-resources/
4096 Apr 1 07:15 kebi-web-admin/
4096 Apr 1 07:15 kebi-web-archive/
4096 Apr 1 07:15 kebi-web-mail/
4096 Apr 1 07:15 kebi-web-mobile/
4096 Apr 1 07:16 kebi-web-parent/
7528 Apr 1 07:16 pom.xml
14099 Apr 1 07:15 README.txt

Су­дя по фор­мату фай­лов, это, ско­рее все­го, дамп из репози­тория на GitHub, который выс­тупа­ет частью поч­тового сер­вера. В исходном коде пол­но упо­мина­ний о пра­витель­ствен­ных доменах:

./kebi-web-parent/mail/document/info.txt
/home/ksign/agent
http://email.mofa.go.kr:8080/mail/sso?type=login
http://mail.mofa.go.kr:8080/mail/sso?type=unseenMails
http://email.mofa.go.kr:8190/mail/sso?type=login
http://mail.mofa.go.kr:8080/mail/sso?type=unseenMails
 

Доступ к внутренней сети правительства Южной Кореи

По­хоже, KIM сох­раня­ет дос­туп к внут­ренним сис­темам сети пра­витель­ства Южной Кореи. Есть про­ект под наз­вани­ем onnara_auto, где лежит нес­коль­ко занят­ных фай­лов. Судя по все­му, это набор инс­тру­мен­тов для работы с внут­ренни­ми пра­витель­ствен­ными сер­верами. Нап­ример, файл /onnara_auto/log/log-20250511.log содер­жит такие записи:

[horedi179] get onnara9.saas.gcloud.go.kr в 11/05/2025 19:41:23
[horedi179] main_job: Session 6112b9bc-5a2a-4abd-a907-aaec4b19e2ed does not exist at 11/05/2025 19:41:23
[horedi179] get onnara9.saas.gcloud.go.kr at 11/05/2025 19:41:23
[horedi179] get https://onnara9.saas.gcloud.go.kr/ at 11/05/2025 19:45:37
[horedi179] main_job: Session 0c446a8c-e913-467d-a9b9-3f08abfb6f7a does not exist at 11/05/2025 19:45:37
[horedi179] get https://onnara9.saas.gcloud.go.kr/SSO.do at 11/05/202...

Со­ответс­тву­ющий код:

drives = instanceManger (config_hub)
client = Client(config_hub)
plugins = PluginManager()
try:
onnara = onnara_sso("horedi79", "1250000", "onnara9")
klass = plugins.load(os.path.join(os.getcwd(),
"scripts", target_project, "onLaunch.py"),
opts={'onnara' :onnara, 'drives': drives, "client": client,)

Хост onnara9.saas.gcloud.go.kr недос­тупен из пуб­лично­го интерне­та, но домен све­тит­ся в ряде докумен­тов как внут­ренний пра­витель­ствен­ный пор­тал. Похоже, что у Кима есть дос­туп к этой сети.

 

Разное

IP этой машины — 156.59.13.153 (Син­гапур). На этом айпиш­нике кру­тит­ся SSHD на пор­те 60233, а порт 4012 све­тит TLS-сер­тификат с CN=*.appletls.com.Fofa. Этот сер­тификат зас­ветил­ся на при­мер­но 1100 уни­каль­ных IP. Льви­ная доля (>90%) раз­бро­сана по Китаю и Гон­конгу. Воз­можно, это какая‑то сеть прок­си или Operational Relay Boxes (ORB).

13 июня 2025 года KIM зарегис­три­ровал сайт webcloud-notice.com. Мы дума­ем, что в рам­ках под­готов­ки будущей фишин­говой ата­ки. Мы наш­ли сер­тификат и при­ват­ный ключ для rc.kt.co.kr — это уда­лен­ный сер­вис управле­ния South Korea Telecom.

Ку­ча паролей LG Uplus (LGU) лежит в mnt/hgfs/Desktop/111/account/account.txt. LGU — южно­корей­ский мобиль­ный опе­ратор. Если коп­нуть глуб­же через favicon, то получа­ется, что KIM сна­чала взло­мал SECUREKI, ком­панию, которая обес­печива­ет LGU мно­гофак­торной аутен­тифика­цией, а потом через нее проб­рался уже в сеть LGU.

Ис­тория поис­ковых зап­росов в Google точ­но зас­лужива­ет прис­таль­ного вни­мания. Осо­бен­но все, что свя­зано с chacha20 и arc4. Да и вре­мен­ные фай­лы Chrome сто­ит покопать — кто зна­ет, что там мож­но нарыть.

По­хоже, KIM кача­ет свои Dev Tools вот с это­го ресур­са:

https://bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i.ipfs.dweb.link

Ли­цен­зию на IDA Pro он ста­щил с заб­рошен­ного и не работа­юще­го боль­ше сай­та в Tor.

В кон­фигах Google Chrome содер­жатся вот такие ссыл­ки. То есть для дос­тупа к сай­там мог­ли исполь­зовать­ся лич­ные учет­ки Google. А что нас­чет акка­унта wwh1004 на GitHub? Может, тоже их? И еще воп­росик: не исполь­зовала ли груп­пиров­ка Google Pay, что­бы опла­тить VPN?

"https://accounts.google.com:443, https://[*.]0x1.gitlab.io":
"https://accounts.google.com:443, https://[*.]aldeid.com":
"https://accounts.google.com:443, https://[*.]asawicki.info":
"https://accounts.google.com:443, https://[*.]devglan.com":
"https://accounts.google.com:443, https://[*.]edureka.co":
"https://accounts.google.com:443, https://[*.]johnwu.cc":
"https://accounts.google.com:443, https://[*.]majorgeeks.com":
"https://accounts.google.com:443, https://[*.]maskray.me":
"https://accounts.google.com:443, https://[*.]namecheap.com":
"https://accounts.google.com:443, https://[*.]qwqdanchun.com":
"https://accounts.google.com:443, https://[*.]rakuya.com.tw":
"https://accounts.google.com:443, https://[*.]redteaming.top":
"https://accounts.google.com:443, https://[*.]reversecoding.net":
"https://accounts.google.com:443, https://[*.]shhoya.github.io":
"https://accounts.google.com:443, https://[*.]sparktoro.com":
"https://accounts.google.com:443, https://[*.]tutorialspoint.com":
"https://accounts.google.com:443, https://[*.]wiseindy.com":
"https://accounts.google.com:443, https://[*.]wwh1004.com":
"https://accounts.google.com:443, https://[*.]wwh1004.github.io":
"https://pay.google.com:443, https://[*.]purevpn.com":
"https://pay.google.com:443, https://[*.]purevpn.com.tw":
"https://pay.google.com:443, https://[*.]zoogvpn.com":

KIM поль­зует­ся Google Translate, что­бы перево­дить сооб­щения об ошиб­ках на китай­ский. В его исто­рии Chrome есть целый ряд сай­тов пра­витель­ства и воен­ных струк­тур Тай­ваня.

Сер­тификат граж­дан Южной Кореи нуж­дает­ся в более глу­боком изу­чении, осо­бен­но инте­ресен момент с выделе­нием про­фес­соров уни­вер­ситетов. Почему их так отдель­но помети­ли?

В пап­ке work/home/user/.cache/vmware/drag_and_drop/ хра­нят­ся фай­лы, которые KIM переки­дывал меж­ду сво­ими Windows- и Linux-машина­ми. Там лежат лоаде­ры Cobalt Strike и реверс‑шел­лы на PowerShell, а так­же ском­пилиро­ван­ный код Onnara и ее модули для прок­сирова­ния в государс­твен­ную сеть и не толь­ко.

В дирек­тории work/home/user/.config/google-chrome/Default/ мож­но най­ти мно­го инте­рес­ных фай­лов (.com.google.Chrome*), которые при­откры­вают завесу над инте­реса­ми, поис­ковыми при­выч­ками и посеща­емы­ми сай­тами поль­зовате­ля KIM. Сре­ди про­чего мы узна­ём, что его час­то заботит выжива­ние Cobalt Strike (CS), он инте­ресу­ется, почему Кунь­мин находит­ся в цен­тре Цен­траль­ной инспек­цион­ной груп­пы, и нерав­нодушен к раз­ным про­ектам на GitHub. Заходит он и на freebuf.com, xakep.ru, а Google Translate исполь­зует для чте­ния accessibility-moda-gov-tw через translate.goog, перево­дя с тай­вань­ско­го.

Фай­лы voS9AyMZ.tar.gz и Black.x64.tar.gz тре­буют тща­тель­ной про­вер­ки. Их бинар­ные хеши пока неиз­вес­тны VirusTotal, но сами наз­вания уж боль­но подоз­ритель­ные:

2bcef4444191c7a5943126338f8ba36404214202 payload.bin
e6be345a13641b56da2a935eecfa7bdbe725b44e payload_test.bin
3e8b9d045dba5d4a49f409f83271487b5e7d076f s.X64.bin

В bash_history — SSH-под­клю­чения к компь­юте­рам в локаль­ной сети.

Пит Хег­сет бы ска­зал: «У него сей­час все чис­то с OPSEC».

 

Артефакты

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

 

Генератор против контрразведки

  • Где лежит: vps/var/www/html/

Инс­тру­мент раз­ворачи­вает фишин­говый HTTPS-сайт на домене, который напоми­нает зна­комый жер­тве адрес. Потом жер­тве с dcc.mil.kr отправ­ляют ссыл­ку на этот фей­ковый сайт. Зло­умыш­ленник наде­ется, что жер­тва вве­дет свои логин и пароль на его сай­те.

Фи­наль­ная пере­адре­сация жер­твы уво­дит ее с фишин­гового сай­та на легаль­ный веб‑сайт. Там он всег­да видит ошиб­ку вхо­да.

Это целенап­равлен­ная ата­ка, и ее авто­ру приш­лось пот­рудить­ся, что­бы най­ти такой URI на легаль­ном сай­те https://dcc.mil.kr.

Плюс это­го трю­ка в том, что жер­тва уви­дит ошиб­ку от https://dcc.mil.kr (которую он зна­ет и которой доверя­ет), хотя его дан­ные на самом деле утек­ли на фишин­говый сайт.

  • config.php — хра­нит длин­нющую чер­ную базу айпиш­ников (и дру­гие спис­ки), что­бы такие ком­пании, как Trend Micro и Google, не смог­ли най­ти фишин­говый сайт.
  • generator.php — это уда­лен­ный интерфейс для управле­ния фишин­говой ата­кой. Дос­туп к нему мож­но получить через задан­ный пароль. Одна­ко хит­рость в том, что куки здесь зашиты в коде, и в админку мож­но зай­ти без пароля, прос­то под­ста­вив нуж­ное зна­чение куки.
curl -v --cookie "HnoplYTfPX=x" https://phishing-site/generator.php

Най­ти такие фишин­говые сай­ты в интерне­те эле­мен­тарно:

curl -v --cookie "HnoplYTfPX=x" https://phishing-site/logs.php
 

Бэкдор в ядре Tomcat

  • Где лежит: mnt/hgfs/Desktop/tomcat20250414_ rootkit linux234/

Это бэк­дор уров­ня ядра. Он поз­воля­ет зло­умыш­ленни­ку уда­лен­но получить дос­туп к сис­теме и остать­ся незамет­ным. В арсе­нале есть кли­ент (tcat.c), сер­верная часть LKM (vmwixs.mod.c) и поль­зователь­ский бэк­дор (master.c).

Кли­ент обща­ется с сер­вером жер­твы нап­рямую по TCP. Заг­ружен­ный модуль ядра (LKM) отлавли­вает любые TCP-соеди­нения, которые сов­пада­ют с опре­делен­ной ком­бинаци­ей TCP-SEQ и IP-ID. Для свя­зи со сво­им поль­зователь­ским бэк­дором master.c в юзер­спей­се LKM исполь­зует /proc/acpi/pcicard.

Мас­тер‑пароль: Miu2jACgXeDsxd; кли­ент исполь­зует !@nf4@#fndskgadnsewngaldfkl.

Скрипт tomcat20250414_rootkit_linux2345/config.sh на лету генери­рует новые сек­ретные ID и стро­ки для каж­дой инстал­ляции и сох­раня­ет их в install.h. Глав­ный пароль зашит в коде и неиз­менен.

  • work/common.c — ком­пилиру­ется как в кли­енте, так и в мас­тере. Тут пол­но ста­рых при­ват­ных клю­чей. Новый бэк­дор генерит эти клю­чи динами­чес­ки (глянь install_common.c).
  • Ikm — vmwfxs.mod.c — это так называ­емая «заготов­ка» LKM, которая поз­воля­ет перех­ватывать нуж­ные фун­кции ядра.
  • Ikm — main.c — тут про­исхо­дит сек­ретная магия: пря­чут­ся про­цес­сы, сетевые кон­некты и фай­лы.
  • Ikm — hkcap.c — соз­дает /proc/acpi/pcicard для обще­ния с юзер­спей­сом:
echo -n "${DECODEKEY}" > /proc/acpi/pcicard

Мо­дуль ядра перех­ватыва­ет каж­дое новое соеди­нение по TCP и про­веря­ет, исполь­зует­ся ли сек­ретный TCP-SEQ и IP-ID (при­чем на любом пор­те!). Эта про­вер­ка выпол­няет­ся в фун­кции syn_active_check.

По­ле раз­мера окна TCP как раз исполь­зует­ся, что­бы нас­тро­ить бэк­дор‑про­токол (чаще все­го это SYN_KNOCK или SYN_KNOCK_SSL).

Ес­ли усло­вие выпол­няет­ся, стар­туют два сле­дующих эта­па:

  1. За­пус­кает­ся юзер­ленд‑про­цесс master.c и переда­ет MASTER_TRANS_STRAIGHT_ARGV в качес­тве парамет­ра -m.
  2. Это перенап­равля­ет TCP-поток на про­цесс master.c в прос­транс­тво поль­зовате­ля, фак­тичес­ки кра­дя его у целево­го сер­виса.

Та­ким обра­зом, master.c прос­то сле­по исполня­ет коман­ды ата­кующе­го.

  • master — master.c — поль­зователь­ский про­цесс, скры­тый на сер­вере жер­твы. Он при­нима­ет перенап­равлен­ный из LKM сетевой поток, выпол­няет SSL-рукопо­жатие и пос­ле него — аутен­тифика­цию по паролю. Пре­дос­тавля­ет стан­дар­тный набор фун­кций: запуск root-shell или прок­сирова­ние соеди­нений во внут­реннюю сеть.
  • client — tcat.c — здесь лежат все фун­кции, нуж­ные, что­бы «сту­чать­ся» в LKM (бэк­дор) на машине жер­твы через TCP-SEQ + IP-ID и уста­нав­ливать SSL-соеди­нение с про­цес­сом master.c, который запус­кает­ся (через LKM) на сер­вере жер­твы.
  • client — kernel.c — здесь хра­нят­ся пре­доп­ределен­ные и засек­речен­ные номера TCP-SEQ и IP-ID. Любая ком­бинация из них может при­менять­ся для исполь­зования бэк­дора. Эти циф­ры не генерят­ся динами­чес­ки и оди­нако­вы для каж­дой уста­нов­ки.
  • client — protocol.c — содер­жит вся­кие заг­лушки и ста­тичес­кие стро­ки, что­бы под­клю­чить­ся к бэк­дору через про­токо­лы SMTP, HTTP или HTTPS (TLS).
char smtp_el[] = "250-example.com\r\n250-STARTTLS\r\n250 SMTPUTF8\r\n";
char smtp_tls1[] = "220 Ready to start TLS\r\n";
char smtp_starttls[] = "starttls\r\n";
char smtp_hellol] = "HELO Alicelr\n";

За­сечь LKM на локаль­ной машине — про­ще прос­того.

Уда­лен­ное обна­руже­ние LKM может быть тоже нес­ложным делом, но тут нуж­на допол­нитель­ная про­вер­ка: аутен­тифика­ция по паролю про­исхо­дит пос­ле SSL-рукопо­жатия.

Та­ким обра­зом, при под­клю­чении с заранее извес­тны­ми зна­чени­ями TCP SEQ=920587710 и IP-ID=10213 к любому целево­му пор­ту (вклю­чая те, где обыч­но нет TLS, — 80, 22, 25) LKM перех­ватыва­ет соеди­нение и переда­ет его в master.c. Даль­ше master.c под­нима­ет TLS и пос­ле рукопо­жатия про­водит аутен­тифика­цию и пре­дос­тавля­ет шелл или прок­си.

Как про­верить наличие бэк­дора:

  1. Ус­танав­лива­ем TCP-соеди­нение.
  2. От­прав­ляем TLS-CLIENT-HELLO.
  3. Ес­ли сер­вер ском­про­мети­рован, он отве­тит кор­рек­тным TLS-SERVER-HELLO, а любой дру­гой сер­вер это­го не сде­лает.
 

Личный маяк Cobalt Strike

  • Где лежит: mnt/hgfs/Desktop/111/beacon

Это кас­томный Cobalt Strike C2 Beacon. Исходный код раз­рабаты­вал­ся в сре­де IntelliJ IDEA IDE. В beacon/.idea/workspace.xml хра­нят­ся ссыл­ки на откры­тые фай­лы, их позиции и исто­рию пос­ледних поис­ковых зап­росов про­екта. Пос­ледние изме­нения в код вно­сились в июне 2024 года.

В фай­ле config.cpp — два бинар­ных бло­ба с кон­фигами для Cobalt Strike. Эти бло­бы валид­ны, и их мож­но рас­шифро­вать с помощью скрип­та CobaltStrikeParser. Внут­ри бло­бов обна­ружат­ся сле­дующие нас­трой­ки:

  • BeaconType: HTTP
  • Port: 8172
  • SleepTime: 60842
  • MaxGetSize: 1048576
  • Jitter: 0
  • MaxDNS: Not Found
  • PublicKey_MD5: c5b6350189a4d960eee8f521b0a3061d
  • C2Server: 192.168.179.112,/dot.gif
  • UserAgent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9; ENUSSEM)
  • HttpPostUri: /submit.php
  • Watermark_Hash: BeudtKgqn1m0Ruvf+VYxuw==
  • Watermark: 126086

В вер­сии KIM так­же есть ран­няя ревизия кода, который в 2025 году встро­или в тро­ян LKM (hkcap.c). Но она недоде­лан­ная: не хва­тает нес­коль­ких клю­чевых фай­лов, нап­ример config.h.

В под­дирек­тории /bak/ лежат ста­рые вер­сии некото­рых фай­лов.

 

ToyBox для Android

KIM активно тру­дит­ся над ToyBox для Android. Похоже, что этот про­ект разошел­ся с офи­циаль­ным репози­тори­ем ToyBox на GitHub где‑то с ком­мита вот с этим ID:

896fa846b1ec8cd4895f6320b56942f129e54bc9

Мы пока не выяс­нили, для чего пред­назна­чены мно­гочис­ленные модифи­кации ToyBox.

Приг­лаша­ем комь­юни­ти разоб­рать­ся.

 

Ivanti Control, он же RootRot

  • Где лежит: mnt/hgfs/Desktop/ivanti_control

Пред­став­ляем исходный код кли­ента для дос­тупа к пуб­лично извес­тно­му бэк­дору.

В 2017 году пар­ни из Synacktiv по ошиб­ке при­няли зак­ладку за уяз­вимость. Но поз­же выяс­нилось, что это дей­стви­тель­но был имплант, оставлен­ный зло­умыш­ленни­ками.

Он называ­ется RootRot.

Этот зап­рос отве­тит сло­вом HIT, если бэк­дор акти­вен:

curl -ksi --cookie "DSPSALPREF=cHJpbnRmKCJISVQiKTsK" "https://HOST/dana-na/auth/setcookie.cgi"
 

Bushfire

  • Где лежит: /mnt/hgfs/Desktop/exp1_admin.py

Этот файл так­же содер­жится в ivanti-new-exp-20241220.zip.

Это экс­пло­ит для Ivanti, воз­можно, для CVE-2025-0282, CVE-2025-0283 или CVE-2025-22457. Пей­лоад уста­нав­лива­ет бэк­дор.

Не­дав­но ребята из Mandiant засек­ли в дикой при­роде инте­рес­ный пей­лоад. Они при­писы­вают его груп­пиров­ке UNC5221, свя­зан­ной с Кита­ем.

Скрипт exp1_admin.py исполь­зует те же коман­ды iptables, которые Mandiant наш­ли в дикой при­роде.

Экс­пло­ит идет в ком­плек­те с докумен­таци­ей, которая в перево­де зву­чит так: «Свя­жись с нами, если экс­пло­ит не сра­бота­ет».

Это может ука­зывать на свя­зи меж­ду груп­пиров­ками в раз­ных государс­твах: воз­можно, они обме­нива­ются кодом и ока­зыва­ют друг дру­гу под­дер­жку.

Этот пей­лоад так­же откры­вает уда­лен­ный дос­туп к ском­про­мети­рован­ной сис­теме. Инте­рес­ное начина­ется на стро­ке 2219, где генерят­ся клю­чи и магичес­кие зна­чения:

  • ключ име­ет все­го 2064 раз­личных ком­бинаций (менее 31 бит стой­кос­ти);
  • ма­гичес­кое зна­чение име­ет (26 × 2 + 10)3 раз­личных ком­бинаций (менее 18 бит стой­кос­ти).

Шиф­рование про­исхо­дит на 85-й стро­ке, и это... XOR с 31-бит­ным клю­чом!

Фун­кцию detect_door (стро­ка 335) мож­но исполь­зовать для уда­лен­ного обна­руже­ния бэк­дора.

За­меть, что, что­бы пос­тучать­ся в бэк­дор, нуж­но толь­ко магичес­кое зна­чение, а не ключ. Оно переда­ется в пер­вых 24 битах ClientRandom в сооб­щении TLS Client Hello. Шанс, что обыч­ный ClientRandom будет иметь вот такую началь­ную 24-бит­ную ком­бинацию, — при­мер­но 1 к 70.

 

SpawnChimera и газета The Hankyoreh

  • Где лежит: mnt/hgfs/Desktop/New folder/203.234.192.200_client.zip

Кли­ент получа­ет дос­туп к бэк­дору SpawnChimera через порт‑нокинг.

IP-адрес 203.234.192.200 при­над­лежит hani.co.kr (The Hankyoreh) — либераль­ной газете из Южной Кореи.

Как работа­ет port knocking, мож­но пос­мотреть в client.py на 152-й стро­ке.

Еще он спря­тан в TLS Client Hello, в 32-бай­товом поле ClientRandom, но с новой осо­бен­ностью: пер­вые 4 бай­та дол­жны содер­жать пра­виль­ный CRC32 оставших­ся 28 байт.

random = os.urandom(28)
client_hello[15:43] = random
jamerc = int("Ob"+"1"*32, 2) - zlib.crc32(random)
client_hello[11:15] = struct.pack('!I', jamerc)

Приг­лаша­ем сооб­щес­тво коп­нуть пог­лубже.

 

Кто такой Kimsuky

Мы приш­ли к выводу, что перед нами Kimsuky: цепоч­ка арте­фак­тов и намеков сло­жилась в их фир­менный почерк — слиш­ком уж точ­ное сов­падение, что­бы при­писать его кому‑то еще.

Сре­ди улик — нас­трой­ка локали: выс­тавлен корей­ский язык. К тому же куча кон­фигов для домен­ных имен, которые свя­заны с ата­ками Kimsuky. Най­ден­ный код перек­лика­ется с тем, что исполь­зовали в пре­дыду­щих кам­пани­ях.

Еще одна инте­рес­ная деталь — у зло­умыш­ленни­ка чет­кий рабочий гра­фик: каж­дый день он под­клю­чает­ся при­мер­но в 09:00 и исче­зает к 17:00 по вре­мени Пхень­яна.

 

Операция Covert Stalker

Опе­рация Covert Stalker — так в южно­корей­ской ИБ‑ком­пании АhnLab окрести­ли мно­гоме­сяч­ную фишин­говую ата­ку из КНДР, нап­равлен­ную про­тив отдель­ных лич­ностей и орга­низа­ций в Южной Корее. Жер­твы — жур­налис­ты, иссле­дова­тели, полити­ки и дру­гие.

На сис­теме зло­умыш­ленни­ка мы обна­ружи­ли нас­трой­ки веб‑сер­вера для домена, свя­зан­ного с этой ата­кой.

SSLCertificateFile /etc/letsencrypt/live/nid-security.com/cert.pem
 

Украденные сертификаты GPKI

В начале 2024 года спе­циалис­ты из S2W нат­кну­лись на новую мал­варь под наз­вани­ем Troll Stealer, написан­ную на Go. Она уме­ет утас­кивать GPKI-сер­тифика­ты (Government Public Key Infrastructure) и клю­чи, которые хра­нят­ся на заражен­ных девай­сах.

GPKI — это такая сис­тема, бла­года­ря которой чинов­ники Южной Кореи могут под­писывать докумен­ты и под­тверждать их под­линность. Так вот, мы наш­ли тысячи таких фай­лов на рабочей машине учас­тни­ка KIM.

subject=C=KR, 0=Government of Korea, OU=Ministry of Unification, OU=people, CN=Lee Min-kyung
issuer=C=KR, 0=Government of Korea, OU=GPKI, CN=CA131100001
  • Где лежит: work/home/user/Desktop/desktop/uni_certs и work/home/user/Downloads/cert/

Вла­делец машины соз­дал прог­рамму на Java, что­бы взло­мать пароли, защища­ющие клю­чи и сер­тифика­ты.

136박정욱001_env.key Password $cys13640229
041????001_env.key Password !jinhee1650!
041????001_sig.key Password ssa9514515!!
[ ... ]
  • Где лежит: work/home/user/Downloads/cert/src/cert.java
 

Атака на похожие цели

Вла­делец машины ата­ковал те же цели, что в прош­лом при­писы­вали кибера­такам груп­пиров­ки Kimsuky.

Naver

Naver Corporation — это южно­корей­ская кор­порация, запус­тившая кучу раз­ных сер­висов. У них есть поис­ковик, обог­навший все мес­тные ана­логи, мобиль­ные пла­тежи через Naver Pay, кар­ты в духе Google Maps, поч­товый сер­вис и еще мно­го чего инте­рес­ного.

Naver уже не пер­вый раз ста­новит­ся мишенью для ата­ки со сто­роны Север­ной Кореи. В 2024 году Zscaler рас­копали новую хро­мовую рас­ширюху под наз­вани­ем TRANSLATEXT от кибер­прес­тупной груп­пиров­ки Kimsuky. Это рас­ширение может впен­дюрить про­изволь­ные JS-скрип­ты при откры­тии опре­делен­ных стра­ниц. Нап­ример, ког­да ты заходишь на стра­ницу логина Naver — nid.naver.com, рас­ширение закиды­вает в бра­узер auth.js и тихо сли­вает твои логин — пароль.

Фи­шин­говая ата­ка, о которой рас­ска­зыва­ется в раз­деле 2.1, исполь­зует домен nid.navermails.com в качес­тве основно­го URL. Вся заг­воз­дка в том, что этот домен креп­ко свя­зан с Kimsuky, как выяс­нили ребята из AhnLab.

Министерство объединения

Од­ной из регуляр­ных мишеней Kimsuky явля­ется Минис­терс­тво объ­еди­нения Южной Кореи. Зло­умыш­ленни­ки смек­нули, как под­ловить GPKI на взло­ман­ных паролях, и наката­ли спе­циаль­но заточен­ный под это вор­длист для перебо­ра. Логи чет­ко показы­вают, что эти пароли гоняли про­тив домена минис­терс­тва.

unikorea123$
unikoreal!! unikorea100
unikorea625!
[...]
  • Где лежит: work/home/user/Downloads/cert/dict/pass.txt
 

AiTM-атака на пользователей Microsoft: гипотеза

В середи­не 2022 года Microsoft и Zscaler обна­ружи­ли ата­ку AiTM. Ата­кующие исполь­зовали веб‑сер­вер, который работа­ет как прок­си меж­ду нас­тоящей стра­ницей вхо­да и жер­твой.

Жер­твам при­ходи­ло пись­мо с заману­хой в виде HTML-вло­жения. Откры­ваешь его, и тебя тут же переки­дыва­ет на прок­си через HTTPS. Прок­си, в свою оче­редь, переки­дыва­ет любой зап­рос на сер­веры Microsoft, заново шиф­руя дан­ные через HTTPS.

Как толь­ко жер­тва логини­лась, прок­си под­хва­тывал ее сес­сион­ные куки и перенап­равлял на сер­вер Microsoft.

Ук­раден­ная кука валид­на и может быть исполь­зована зло­умыш­ленни­ком без необ­ходимос­ти про­ходить авто­риза­цию с MFA. Для этой кам­пании при­менял­ся домен websecuritynotice.com.

Кон­крет­но этот домен мы в дам­пе не обна­ружи­ли, но наш­ли очень похожий (заметь лиш­нюю бук­ву s):

subject=CN=*.websecur1tynotices.com
  • Где лежит: vps/etc/letsencrypt/live/websecuritynotices.com

Так­тика, тех­ника и про­цеду­ры (TTP), схо­жесть домен­ных имен и дей­ствия пос­ле взло­ма (мошен­ничес­тво с пла­тежа­ми и так далее) ука­зыва­ют на явную связь с груп­пой Kimsuky.

 

KIM — китаец?

KIM перево­дит корей­ский на упро­щен­ный китай­ский через Google Translate. Похоже, без перево­да он понима­ет по‑корей­ски сов­сем нем­ного.

KIM работа­ет по рас­писанию китай­ских праз­дни­ков. С 31 мая по 2 июня отме­чали праз­дник дра­конь­их лодок, и в это вре­мя KIM взял передыш­ку, тог­да как в Север­ной Корее это был обыч­ный рабочий день.

При этом ути­лита hindsight показа­ла, что в нас­трой­ках Chrome у KIM выс­тавле­но корей­ское стан­дар­тное вре­мя.

 

Забавные факты и приколы

В сен­тябре 2023 года нек­то под псев­донимом KIM попытал­ся при­обрести домен nextforum-online.com на Namecheap.com. Опла­та бит­коином, что может пой­ти не так?

Па­ру дней спус­тя Namecheap заб­локиро­вал домен, не объ­ясняя при­чину. Ког­да KIM попытал­ся вос­ста­новить дос­туп, в Namecheap ска­зали сле­дующее:

Что­бы под­твер­дить легитим­ность зарегис­три­рован­ных доменов, пре­дос­тавь нам сле­дующую информа­цию:
Цель регис­тра­ции домена.
До­кумен­ты, под­твержда­ющие пол­номочия дей­ство­вать от име­ни Microsoft, или же под­твержде­ние того, что дан­ные домены не отно­сят­ся к этой ком­пании.

Что ж, получа­ется, что Namecheap не такой уж неп­робива­емый!

Еще занят­ный факт: в 2020 году, ког­да домен websecuritynotice.com исполь­зовали в фишин­говой кам­пании, вла­делец соз­дал для этих атак нес­коль­ко под­доменов с реалис­тичны­ми адре­сами.

login.websecuritynotice.com. IN A 80.240.25.169
wwwoffice.websecuritynotice.com. IN A 80.240.25.169
www-microsoft.websecuritynotice.com. IN A 80.240.25.169
prod-msocdn-25ae5ec6.websecuritynotice.com. IN A 80.240.25.169
prod-msocdn-55e5273a.websecuritynotice.com. IN A 80.240.25.169
prod-msocdn-84311529.websecuritynotice.com. IN A 80.240.25.169
prod-msocdn-c7b8a444.websecuritynotice.com. IN A 80.240.25.169
aadcdn-msauth-84311529.websecuritynotice.com. IN A 80.240.25.169
sts-glb-nokia-346189f1.websecuritynotice.com. IN A 80.240.25.169
res-cdn-office-84311529.websecuritynotice.com. IN A 80.240.25.169
aadcdn-msftauth-25ae5ec6.websecuritynotice.com. IN A 80.240.25.169
aadcdn-msftauth-55e5273a.websecuritynotice.com. IN A 80.240.25.169
aadcdn-msftauth-84311529.websecuritynotice.com. IN A 80.240.25.169
r4-res-office365-55e5273a.websecuritynotice.com. IN A 80.240.25.169
r4-res-office365-84311529.websecuritynotice.com. IN A 80.240.25.169

Од­нако в 2025 году KIM поленил­ся и поль­зовал­ся толь­ко глав­ным доменом:

http://www.websecuritynotices.com/request.php?i=amhraW0xQGtsaWQub3Iua3I=

Па­раметр i — это закоди­рован­ный в Base64 адрес элек­трон­ной поч­ты получа­теля. В нашем слу­чае это jhkim1@klid.or.kr.

В янва­ре 2025 года этот домен ука­зывал на IP 104.167.16.97. А в мар­те 2025-го домен download.sponetcloud.com тоже резол­вился в этот же IP.

На VirusTotal есть его родс­твен­ник: sharing.sponetcloud.com. Вот спи­сок URL-адре­сов, которые с этим доменом свя­заны:

https://sharing.sponetcloud.com/logo.png?v=bG11Mjc2MUBzcG8uZ28ua3I=
https://sharing.sponetcloud.com/bigfile/v1/urls/view?shareto=aGFudGFlaHdhbkBzcG8uZ28ua3I=

Па­рамет­ры сно­ва зашиф­рованы в Base64, но при декоди­рова­нии видим адре­са lme2761@spo.go.kr и hantaehwan@spo.go.kr. Оба адре­сата работа­ют в про­кура­туре Южной Кореи.

Те же самые адре­са элек­трон­ной поч­ты (и еще куча дру­гих) всплы­вают на VPS Кима в фай­ле request_log.txt:

hantaehwan@spo.go.kr
paragon74@spo.go.kr
baekdu475@spo.go.kr
[...]

Не может ли это быть под­делкой? KIM ведь мог спе­циаль­но нап­равить часть сво­их доменов на IP-адре­са, которые ког­да‑то были зас­вечены в связ­ке с Kimsuky.

Нап­ример, у nid-security.com вот такая исто­рия хос­тинга DNS:

nid-security.com. IN A 27.255.80.170 (observation date: 2024-11-05) nid-security.com. IN A 45.133.194.126 (observation date: <= 2025-05-09)
nid-security.com. IN A 185.56.91.21
nid-security.com. IN A 192.64.119.241
*.nid-security.com. IN A 45.133.194.126
lcs.nid-security.com. IN A 27.255.80.170
lcs.nid-security.com. IN A 45.133.194.126
nid.nid-security.com. IN A 27.255.80.170
nid.nid-security.com. IN A 45.133.194.126
www.nid-security.com. IN A 45.133.194.126
rcaptcha.nid-security.com. IN A 27.255.80.170
rcaptcha.nid-security.com. IN A 45.133.194.126
zwkd3e3wbc.nid-security.com. IN A 45.133.194.126

Лог фишин­га на VPS от 2 декаб­ря 2024 года зас­ветил вот такой домен:

https://nid.nid-security.com/bigfileupload/download?h=UJw39mzt3bLZ0ESuajYK1h-G1U1FavI1vmLUbNvCrX80-AtVgL7TIsphr1hlrvKOdOR-dbnMHVV7NJ4N

В этом месяце домен резол­вился на 45.133.194.126. Так что же, 27.255.80.170 был прос­то улов­кой?

И напос­ледок еще одна забав­ная деталь. Ког­да Kimsuky регис­три­ровал домен websecuritynotices.com, его поч­та зас­ветилась в записях SOA:

websecuritynotices.com IN SOA ns4.1domainregistry.com dysoni91.tutamail.com

Kimsuky, ты не хакер!

Кто такой нас­тоящий хакер? Это очень умный человек, который кай­фует от того, что исполь­зует тех­нологии не по их пря­мому наз­начению, — и дела­ет это без вре­да для дру­гих. У него нет полити­чес­кой повес­тки и нет корыс­тных мотивов. Он не берет денег и не гонит­ся за наг­радами. Не слу­жит никому и не прес­леду­ет никаких целей, кро­ме одной — выразить себя.

То есть худож­ник.

Kimsuky, ты не хакер! Тобой дви­жет жаж­да наживы — ты хочешь набить кар­маны сво­им хозя­евам и слу­жить их полити­чес­кой повес­тке. Ты вору­ешь у дру­гих и заботишь­ся толь­ко о сво­их. Ты ста­вишь себя выше всех осталь­ных. Ты мораль­но прог­нил!

Мы — хакеры, и мы — пол­ная про­тиво­полож­ность тебе. В нашем мире мы все рав­ны. У нас нет цве­та кожи, наци­ональ­нос­ти и полити­чес­кой повес­тки. Мы никому не слу­жим. Мы взла­мыва­ем, что­бы выразить себя и поделить­ся зна­ниями с дру­гими такими же твор­цами. Что­бы вно­сить вклад, делить­ся и рас­ширять зна­ния все­го челове­чес­тва. Ради самой кра­соты переда­чи дан­ных.

А ты лезешь в сети ради все­го неп­равиль­ного.

— Saber и cyb0rg

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии