Наши продукты

Все выпуски в PDF →
  • Годовая подписка на Xakep.ru

    Все статьи, PDF-архив, скидки и другие бонусы

    6000₽ в год

    Подписаться
  • Ежеквартальный «Хакер» #4

    Печатный выпуск за август–ноябрь 2026 года

    2000₽

    Заказать
  • Ежеквартальный «Хакер» #3

    Печатный выпуск за май–июль 2026 года

    2000₽

    Заказать
  • Спецвыпуск «Хакера» #4

    Избранные материалы 2021–2022 годов на бумаге

    2000₽

    Заказать
ClamAV — анти­вирус с пол­ностью откры­тым исходным кодом. Слож­но изоб­рести не круг­лое колесо: анти­вирус­ные движ­ки реша­ют схо­жие задачи — раз­бира­ют фай­ловые фор­маты, рас­паковы­вают содер­жимое и ищут сиг­натуры. Поэто­му мно­гие архи­тек­турные решения у них похожи, а изу­чение кода ClamAV помога­ет понять, как устро­ены анти­виру­сы в целом.

Важ­но понимать мес­то ClamAV в эко­сис­теме. Это не кон­курент дес­ктоп­ным анти­виру­сам вро­де Kaspersky или Windows Defender — у него нет поведен­ческо­го ана­лиза, нет облачной репута­ции фай­лов, нет про­активной защиты, кро­ме огра­ничен­ного on-access-ска­ниро­вания на Linux.

Книга «Обход антивирусов на практике»

Это вто­рая гла­ва из кни­ги «Обход анти­виру­сов на прак­тике».

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

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

 

Распаковка баз

Офи­циаль­ные сиг­натуры пос­тавля­ются не рос­сыпью отдель­ных фай­лов, а в кон­тей­нерах CVD (ClamAV Virus Database). Основная база хра­нит­ся в main.cvd, час­то обновля­емые сиг­натуры — в daily.cvd, байт‑код — в bytecode.cvd. CVD — это под­писан­ный кон­тей­нер. В его начале находит­ся заголо­вок дли­ной 512 байт с вер­сией базы, количес­твом сиг­натур, тре­буемым уров­нем воз­можнос­тей движ­ка, кон­троль­ной сум­мой и циф­ровой под­писью. Сле­дом идет сжа­тый архив с фай­лами сиг­натур: хешами, бай­товыми пат­терна­ми, логичес­кими пра­вила­ми, сер­тифика­тами и дру­гими слу­жеб­ными дан­ными.

Пос­мотреть информа­цию о кон­тей­нере мож­но с помощью встро­енной ути­литы sigtool:

sigtool --info main.cvd

Ко­ман­да покажет вер­сию базы, вре­мя сбор­ки, количес­тво сиг­натур и резуль­тат про­вер­ки под­писи. sigtool --unpack извле­кает фай­лы в текущий каталог, поэто­му для них луч­ше заранее соз­дать отдель­ную пап­ку:

mkdir main-unpacked
cd main-unpacked
sigtool --unpack ../main.cvd

Ес­ли база уста­нов­лена сис­темным пакетом Linux, из соз­данно­го катало­га ее мож­но рас­паковать по абсо­лют­ному пути:

sigtool --unpack /var/lib/clamav/main.cvd

Пос­ле рас­паков­ки появят­ся фай­лы main.hdb, main.hsb, main.mdb, main.ndb, main.crb и main.info. Боль­шинс­тво из них тек­сто­вые: их мож­но открыть в редак­торе и искать нуж­ную сиг­натуру обыч­ным поис­ком. При­меры ниже при­веде­ны из офи­циаль­ных main.cvd вер­сии 63 и daily.cvd вер­сии 28107, акту­аль­ных на 30 августа 2026 года.

 

Форматы сигнатур

Все фор­маты (кро­ме байт‑кода и бинар­ных катало­гов) — тек­сто­вые фай­лы, где каж­дая стро­ка — одна сиг­натура. Поля раз­деля­ются дво­ето­чием или точ­кой с запятой. Рас­смот­рим основные фор­маты сиг­натур.

 

Простые текстовые паттерны (.db)

Фай­лы .db име­ют уста­рев­ший фор­мат пер­вого поколе­ния. Каж­дая стро­ка сос­тоит из име­ни сиг­натуры и шес­тнад­цатерич­ного пат­терна, раз­делен­ных зна­ком равенс­тва. Пос­ле зна­ка равенс­тва исполь­зует­ся общий син­таксис бай­товых пат­тернов ClamAV.

Конс­трук­цияЧто озна­чает
ABТоч­ный байт 0xAB
??Один про­изволь­ный байт
*Лю­бое количес­тво про­изволь­ных бай­тов, вклю­чая ноль
{5}Ров­но пять про­изволь­ных бай­тов
{-5}Не более пяти про­изволь­ных бай­тов
{5-}Не менее пяти про­изволь­ных бай­тов
4142{2-5}4344Най­ти бай­ты 4142, про­пус­тить от двух до пяти любых бай­тов, затем най­ти 4344. Фигур­ные скоб­ки исполь­зуют­ся, ког­да по обе сто­роны про­пус­ка есть фик­сирован­ные бло­ки минимум по два бай­та
(AA\|BB)Один из перечис­ленных бай­тов или пос­ледова­тель­нос­тей

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

При стан­дар­тных нас­трой­ках пат­терн с мас­ками дол­жен содер­жать хотя бы два пос­ледова­тель­ных точ­ных бай­та: 41??42 будет откло­нен, а 4142??4344 — при­нят. * и перемен­ные про­пус­ки, нап­ример {2-5}, делят пат­терн на час­ти, и такой двух­бай­товый фраг­мент нужен в каж­дой час­ти.

Это тре­бова­ние свя­зано с реали­заци­ей авто­мата Ахо — Корасик. Для добав­ления каж­дой час­ти пат­терна в дерево поис­ка нужен неп­рерыв­ный фраг­мент минимум из двух точ­ных бай­тов. Сам алго­ритм будет рас­смот­рен ниже.

Фик­сирован­ный про­пуск {N}, где N — от 1 до 127, обра­баты­вает­ся ина­че: нап­ример, {5} прев­раща­ется в пять ??.

June7=018ccb81c33f005350cb

Пат­терн сос­тоит толь­ко из точ­ных бай­тов и не содер­жит под­ста­новоч­ных конс­трук­ций.

VCL-II3=01b9????8135????4747e2f8c3

Каж­дая пос­ледова­тель­ность ???? заменя­ет два про­изволь­ных бай­та.

DOS.Dead=b9ac01{9-11}8d7c14{2-3}2e300547e2f8

Меж­ду фик­сирован­ными час­тями допус­кают­ся сна­чала от 9 до 11, а затем от 2 до 3 про­изволь­ных бай­тов.

W98.Hybris.E=10400081*75f16800104000c300000000

Звез­дочка раз­реша­ет про­межу­ток любой дли­ны меж­ду дву­мя фик­сирован­ными час­тями.

SymbOS.Trojan.Doombot=2e0064006c006c00??003a005c00(45|65)00(54|74)0065006c002e0064006c006c00

Конс­трук­ция ?? заменя­ет один байт, а (45|65) и (54|74) допус­кают про­пис­ные или строч­ные ASCII-бук­вы E/e и T/t.

DOS.Kasiunia=bb1400baad0e2e3007434a{-4}75f5

Конс­трук­ция {-4} допус­кает от нуля до четырех про­изволь­ных бай­тов.

Заг­рузчик .db переда­ет пат­терн обще­му механиз­му поис­ка с позици­ей *, поэто­му сов­падение ищет­ся во всем ска­ниру­емом объ­екте. Обыч­ные фик­сирован­ные пос­ледова­тель­нос­ти могут обра­баты­вать­ся алго­рит­мом Бой­ера — Мура, а конс­трук­ции с мас­ками, про­пус­ками и аль­тер­натива­ми — авто­матом Ахо — Корасик.

 

Расширенные паттерны (.ndb, .ndu)

В фай­лах .ndb хра­нят­ся рас­ширен­ные бай­товые сиг­натуры ClamAV: все конс­трук­ции hex-пат­тернов из фор­мата .db дей­ству­ют и здесь. Сиг­натуры в кон­тей­нере .ndu исполь­зуют тот же син­таксис, но пред­назна­чены для обна­руже­ния потен­циаль­но нежела­тель­ного ПО (PUA — Potentially Unwanted Applications).

Win.Ransomware.BlackCat-9974801-0:1:*:6c6f636b65723a3a636f72653a3a:90:255

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

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

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

    Подписаться

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