vak: (Default)
[personal profile] vak
Тут меня спросили старые друзья, где скачать исходники ОС Демос. Нет проблем, лежит на моём сайте: d22.tar.gz. Но оказалось, что у товарища файл не скачивается: антивирус его зарубает. То есть где-то там унутре схоронилась зараза. Стало любопытно! Давайте поисследуем.

Я в последние двадцать лет живу в Линуксе и на маке, и антивирусами не пользуюсь. И так всё безопасно. Из более раннего опыта остались положительные впечатления от антивируса ClamAV. Когда-то я его даже встраивал в наш корпоративный sendmail в Крониксе. Отлично справлялся: за несколько лет ни один вирус по почте не проскочил. В среднем одно-два письма с опасным вложением отлавливал.

Установить ClamAV на маке нетрудно. На Линуксе должно быть похоже.
brew install clamav
cd /usr/local/etc/clamav
cp freshclam.conf.sample freshclam.conf
Дальше нужно отредактировать файл freshclam.conf. По минимуму достаточно удалить строку "Example" в начале файла. Там в комментариях всё написано.

После этого обновляем базу вирусов из сети:
$ freshclam 
ClamAV update process started at Fri Feb 9 21:07:32 2024
daily database available for download (remote version: 27180)
ERROR: NULL X509 store
Time: 2.4s, ETA: 0.0s [========================>] 59.89MiB/59.89MiB
Testing database: '/usr/local/var/lib/clamav/tmp.490347e161/clamav-a54e59a89f319f5921157771aad9bd2a.tmp-daily.cvd' ...
Database test passed.
daily.cvd updated (version: 27180, sigs: 2052672, f-level: 90, builder: raynman)
main database available for download (remote version: 62)
ERROR: NULL X509 store
Time: 5.9s, ETA: 0.0s [========================>] 162.58MiB/162.58MiB
Testing database: '/usr/local/var/lib/clamav/tmp.490347e161/clamav-a77aeb1d9c704e1bd04cacbe4e177196.tmp-main.cvd' ...
Database test passed.
main.cvd updated (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
bytecode database available for download (remote version: 334)
ERROR: NULL X509 store
Time: 0.1s, ETA: 0.0s [========================>] 285.12KiB/285.12KiB
Testing database: '/usr/local/var/lib/clamav/tmp.490347e161/clamav-a25b5b63ec44ab4235ae302d67208fef.tmp-bytecode.cvd' ...
Database test passed.
bytecode.cvd updated (version: 334, sigs: 91, f-level: 90, builder: anvilleg)
Теперь просканируем исходники Демоса. Флаг -r включает рекурсивную обработку папок, флаг -o отключает сообщения про файлы, которые OK.
$ wget https://pub.sergev.org/unix/d22.tar.gz
$ tar xzf d22.tar.gz
$ clamscan -r -o d22
Loading: 10s, ETA: 0s [========================>] 8.68M/8.68M sigs
Compiling: 3s, ETA: 0s [========================>] 41/41 tasks

/Users/vak/d22/cmd/comint/dpi/tdpi.c: Empty file
d22/cmd/RCS: Symbolic link
/Users/vak/d22/cmd/wsh/Tape.z: Win.Trojan.Vienna-8 FOUND
/Users/vak/d22/cmd/true.sh: Empty file

----------- SCAN SUMMARY -----------
Known viruses: 8684540
Engine version: 1.3.0
Scanned directories: 124
Scanned files: 1613
Infected files: 1
Data scanned: 42.97 MB
Data read: 22.29 MB (ratio 1.93:1)
Time: 22.294 sec (0 m 22 s)
Start Date: 2024:02:09 21:11:15
End Date: 2024:02:09 21:11:37
Видим файл с вирусом. Это упакованный архив tar с исходниками утилиты wsh. Давайте его распакуем и просканируем внутри.
$ mkdir wsh
$ tar xzf d22/cmd/wsh/Tape.z -C wsh
$ clamscan -r -o wsh
Loading: 9s, ETA: 0s [========================>] 8.68M/8.68M sigs
Compiling: 3s, ETA: 0s [========================>] 41/41 tasks

/Users/vak/wsh/W.test.com: Win.Trojan.Vienna-8 FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8684540
Engine version: 1.3.0
Scanned directories: 3
Scanned files: 114
Infected files: 1
Data scanned: 1.31 MB
Data read: 0.70 MB (ratio 1.87:1)
Time: 13.948 sec (0 m 13 s)
Start Date: 2024:02:09 21:14:59
End Date: 2024:02:09 21:15:12
Заглянем внутрь "больного" файла W.test.com.
$ cat -v wsh/W.test.com
?. a 17
echo hello > 00
echo "hi"There >> 00
echo Hey"You" >> 00
echo Go"To"Hell >> 00
echo MIG$a >> 00
echo CWD${CWD}IS >> 00
echo Good" Day $a" >> 00
echo Where" isMy${a}Years"Yeah >> 00
echo Here\"There\"and"any$a"Where >> 00
echo CWD$[\"%t\"%end]{CWD}IS >> 00
echo CWD$[\"%t\"%end]CWD"IS"ETC >> 00
echo \\ >> 00
echo "\" >> 00
echo '\' >> 00
echo "\\" >> 00
echo \n >> 00
echo \\n >> 00
echo \" >> 00
echo \""a" >> 00
echo '"' >> 00

echo \$ >> 00
echo "\$" >> 00
echo "\\$" >> 00
echo "$" >> 00
echo "\\\$" >> 00
echo \\\$ >> 00

echo "\""hi" >> 00

unset a
P?R^GM-^K?M-^A?^@^@??^C^@?^@^A?M-^K??0?!<^@u^C??^A?......... ............................................................
Очевидно, это был шелловский скрипт, которому почему-то дали расширение ".com". Вирус посчитал, что это выполняемый файл MS-DOS, и заразил его. Дописал в конец кучу мусора (тело вируса) и в начало несколько байт - переход на заражённый участок файла.

Вот такой привет из прошлого. В википедии пишут, что вирус Vienna появился в 1987 году. Архив Tape.z был упакован в 1990-м году.

Date: 2024-02-10 11:54 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Хорошая идейка, называть скрипты .com или .exe

И занятное расследование, спасибо.

Date: 2024-02-10 17:00 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Одно неясно: как демосовский шелл-скрипт оказался в файловой системе, доступной ДОСу.

Date: 2024-02-10 18:06 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Забавно получилось. Какого рожна антивирусы продолжают реагировать на то, что уже не может причинить вреда, неясно - ведь .COM файлы кроме как на специально запущенном эмуляторе Доса выполнить невозможно.

Date: 2024-02-13 09:03 (UTC)
lxe: (Default)
From: [personal profile] lxe
> на специально запущенном эмуляторе Доса

Я регулярно запускаю эмулятор DOS. Как минимум несколько тысяч раз в год.
С, как сейчас модно говорить, рекреационной целью (при этом не ретроинженерной).

Date: 2024-02-14 00:33 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
И чему там вирус сможет повредить? Образу диска, скачанному из интернета, который можно в любой момент скачать заново?

Date: 2024-02-14 02:50 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ну да, и из всего перечисленного произвольные файлы из интернета могут попасть только в virtual environments, откуда никуда не уйдут.

Date: 2024-02-14 07:21 (UTC)
lxe: (Default)
From: [personal profile] lxe
DOSBox монтирует каталоги, а не образы дисков.

Date: 2024-02-15 01:34 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
И чему в тех каталогах вирус сможет повредить? Файлам, скачанным из интернета, которые можно в любой момент скачать заново?

Date: 2024-02-15 01:37 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Это да. Впрочем, в тех базах уже далеко за сотню тысяч паттернов, и если их них выбросить жалкие ~тысячи относящихся к MS-DOS, толку будет немного, кроме удобства для скачивателей Демоса. Короче, овчинка выделки не стоит.

Date: 2024-02-15 02:35 (UTC)
lxe: (Default)
From: [personal profile] lxe
Или собрать заново, или заново пропатчить из имеющихся.
Но исходя из этого аргумента не надо вообще защищать контейнеры, в которых исполняется скомпилированный открытый код. Его тоже можно заново скачать из интернета.