Určenie typu súboru podpisom. Prípady s podpismi: Zlý analyzátor súborov a antivírusový program

Mnohí možno počuli o súboroch ako rarjpeg "a. Ide o špeciálny typ súboru, ktorým je zlepený obrázok jpeg a archív rar. Je to vynikajúci kontajner na skrytie skutočnosti prenosu informácií. Rarjpeg môžete vytvoriť pomocou nasledujúce príkazy:

UNIX: mačka obrázok1.jpg archív.rar> obrázok2.jpg
WINDOWS: kopírovať / b obrázok1.jpg + archív.rar obrázok2.jpg

Alebo ak máte hex editor.

Samozrejme, aby ste skryli skutočnosť prenosu informácií, môžete použiť nielen formát JPEG, ale aj mnoho ďalších. Každý formát má svoje vlastné charakteristiky, vďaka ktorým môže, ale nemusí byť vhodný pre úlohu kontajnera. Popíšem, ako môžete nájsť lepené súbory v najpopulárnejších formátoch alebo uviesť skutočnosť lepenia.

Metódy detekcie zlepených súborov možno rozdeliť do troch skupín:

  1. Metóda kontroly oblasti za značkou EOF. Mnoho populárnych formátov súborov má takzvanú značku konca súboru, ktorá je zodpovedná za zobrazenie požadovaných údajov. Prehliadače fotografií napríklad čítajú všetky bajty až po túto značku, no oblasť za ňou je ignorovaná. Táto metóda je ideálna pre formáty: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Metóda kontroly veľkosti súboru. Štruktúra niektorých formátov (audio a video kontajnery) umožňuje vypočítať skutočnú veľkosť súboru a porovnať ju s pôvodnou veľkosťou. Formáty: AVI, WAV, MP4, MOV.
  3. Metóda kontroly súborov CFB. CFB alebo Compound File Binary Format je formát dokumentu vyvinutý spoločnosťou Microsoft, ktorý je kontajnerom s vlastným súborovým systémom. Táto metóda je založená na detekcii anomálií súborov.

Existuje život po skončení súboru?

Jpeg

Ak chcete nájsť odpoveď na túto otázku, je potrebné ponoriť sa do špecifikácií formátu, ktorý je „predchodcom“ lepených súborov, a pochopiť jeho štruktúru. Každý JPEG začína podpisom 0xFF 0xD8.

Za týmto podpisom sú servisné informácie, voliteľná ikona obrázka a nakoniec samotný komprimovaný obrázok. V tomto formáte je koniec obrázka označený dvojbajtovým podpisom 0xFF 0xD9.

Obrázok PNG

Prvých osem bajtov súboru PNG je obsadených nasledujúcim podpisom: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Koncový podpis, ktorý ukončí tok údajov: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Spoločný podpis pre všetky archívy rar: 0x52 0x61 0x72 0x21 (Rar!). Po ňom nasledujú informácie o verzii archívu a ďalšie súvisiace údaje. Experimentálne sa zistilo, že archív končí podpisom 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Tabuľka formátov a ich podpisov:
Algoritmus na kontrolu lepenia v týchto formátoch je veľmi jednoduchý:

  1. Nájdite počiatočný podpis;
  2. Nájdite konečný podpis;
  3. Ak po konečnom podpise nie sú žiadne údaje, váš súbor je čistý a neobsahuje žiadne prílohy! V opačnom prípade po konečnom podpise hľadajte iné formáty.

GIF a PDF

Dokument PDF môže mať viac ako jednu značku EOF, napríklad v dôsledku nesprávneho generovania dokumentu. Počet koncových podpisov v súbore GIF sa rovná počtu snímok v ňom. Na základe zvláštností týchto formátov je možné vylepšiť algoritmus na kontrolu prítomnosti zlepených súborov.
  1. Bod 1 sa opakuje z predchádzajúceho algoritmu.
  2. Bod 2 sa opakuje z predchádzajúceho algoritmu.
  3. Pri hľadaní konečného podpisu si zapamätajte jeho umiestnenie a hľadajte ďalej;
  4. Ak týmto spôsobom dosiahneme poslednú značku EOF, súbor je čistý.
  5. Ak súbor nekončí konečným podpisom - prejdite na miesto posledného nájdeného konečného podpisu.
Veľký rozdiel medzi veľkosťou súboru a pozíciou za posledným koncovým podpisom naznačuje prítomnosť pripojenej prílohy. Rozdiel môže byť viac ako desať bajtov, aj keď je možné nastaviť iné hodnoty.

PSČ

Zvláštnosťou archívov ZIP je prítomnosť troch rôznych podpisov: Štruktúra archívu je nasledovná:
Hlavička lokálneho súboru 1
Údaje súboru 1
Deskriptor údajov 1
Hlavička lokálneho súboru 2
Údaje súboru 2
Deskriptor údajov 2
...
Hlavička lokálneho súboru č
Údaje súboru č
Deskriptor údajov č
Hlavička dešifrovania archívu
Archivujte extra dátový záznam
Centrálny adresár
Najzaujímavejší je centrálny adresár, ktorý obsahuje metadáta o súboroch v archíve. Centrálny adresár vždy začína podpisom 0x50 0x4b 0x01 0x02 a končí podpisom 0x50 0x4b 0x05 0x06, po ktorom nasleduje 18 bajtov metadát. Zaujímavé je, že prázdne archívy pozostávajú iba z konečného podpisu a 18 nulových bajtov. Po 18 bajtoch prichádza oblasť komentárov k archívu, čo je ideálny kontajner na skrytie súboru.

Ak chcete skontrolovať archív ZIP, musíte nájsť konečný podpis centrálneho adresára, preskočiť 18 bajtov a vyhľadať podpisy známych formátov v oblasti komentárov. Veľká veľkosť komentár naznačuje aj fakt lepenia.

Na veľkosti záleží

AVI

Štruktúra súboru AVI je nasledovná: každý súbor začína podpisom RIFF (0x52 0x49 0x46 0x46). Na 8. byte je podpis AVI špecifikujúci formát (0x41 0x56 0x49 0x20). Blok s ofsetom 4, pozostávajúci zo 4 bajtov, obsahuje počiatočnú veľkosť bloku údajov (v malom endiánskom poradí bajtov). Ak chcete zistiť číslo bloku obsahujúceho ďalšiu veľkosť, pridajte veľkosť hlavičky (8 bajtov) a veľkosť získanú v bloku 4-8 bajtov. Tým sa vypočíta celková veľkosť súboru. Predpokladá sa, že vypočítaná veľkosť môže byť menšia ako skutočná veľkosť súboru. Po vypočítanej veľkosti bude súbor obsahovať iba nula bajtov (potrebné na zarovnanie 1Kb orámovania).

Príklad výpočtu veľkosti:


Wav

Rovnako ako AVI, súbor WAV začína podpisom RIFF, avšak tento súbor má 8-bajtový podpis - WAVE (0x57 0x41 0x56 0x45). Veľkosť súboru sa vypočíta rovnakým spôsobom ako AVI. Skutočná veľkosť musí byť presne rovnaká ako vypočítaná.

MP4

MP4 alebo MPEG-4 je formát mediálneho kontajnera, ktorý sa používa na ukladanie video a audio streamov a tiež poskytuje úložisko pre titulky a obrázky.
Pri posune 4 bajty sa nachádzajú podpisy: typ súboru ftyp (66 74 79 70) (QuickTime Container File Type) a podtyp súboru mmp4 (6D 6D 70 34). Rozpoznať skryté súbory, zaujíma nás možnosť výpočtu veľkosti súboru.

Pozrime sa na príklad. Veľkosť prvého bloku je pri nulový posun a rovná sa 28 (00 00 00 1C, poradie bajtov Big Endian); tiež ukazuje na posun, kde sa nachádza veľkosť druhého bloku údajov. Pri posune 28 nájdeme veľkosť ďalšieho bloku rovnajúcu sa 8 (00 00 00 08). Ak chcete nájsť veľkosť ďalšieho bloku, spočítajte veľkosti predchádzajúcich nájdených blokov. Veľkosť súboru sa teda vypočíta takto:

MOV

Tento široko používaný formát je tiež kontajner MPEG-4. MOV používa vlastný algoritmus kompresie údajov, má štruktúru podobnú MP4 a používa sa na rovnaký účel – na ukladanie zvukových a obrazových údajov, ako aj súvisiacich materiálov.
Rovnako ako MP4, každý súbor mov má 4-bajtový podpis ftyp s offsetom 4, avšak nasledujúci podpis má hodnotu qt__ (71 74 20 20). Pravidlo pre výpočet veľkosti súboru sa nezmenilo: od začiatku súboru vypočítame veľkosť ďalšieho bloku a pridáme ho.

Spôsob kontroly tejto skupiny formátov na prítomnosť „zlepených“ súborov spočíva vo výpočte veľkosti podľa vyššie špecifikovaných pravidiel a jej porovnaní s veľkosťou skenovaného súboru. Ak je aktuálna veľkosť súboru oveľa menšia ako vypočítaná, znamená to, že došlo k zlúčeniu. Pri kontrole súborov AVI sa predpokladá, že vypočítaná veľkosť môže byť menšia ako veľkosť súboru v dôsledku prítomnosti pridaných núl na zarovnanie okraja. V takom prípade je potrebné skontrolovať nuly po vypočítanej veľkosti súboru.

Kontrola binárneho formátu zloženého súboru

Tento formát súboru vyvinutý spoločnosťou Microsoft je známy aj ako OLE (Object Linking and Embedding) alebo COM (Component Objektový model). súbory DOC, XLS, PPT patria do skupiny formátov CFB.

Súbor CFB pozostáva z 512-bajtovej hlavičky a sektorov rovnakej dĺžky, v ktorých sú uložené dátové toky alebo informácie o službách. Každý sektor má svoje nezáporné číslo, s výnimkou špeciálnych čísel: "-1" - očísluje voľný sektor, "-2" - očísluje sektor, ktorý uzatvára reťazec. Všetky sektorové reťazce sú definované v tabuľke FAT.

Predpokladajme, že útočník upravil súbor doc a na jeho koniec vložil iný súbor. Existuje niekoľko rôznych spôsobov, ako to zistiť alebo naznačiť anomáliu v dokumente.

Nenormálna veľkosť súboru

Ako je uvedené vyššie, každý súbor CFB pozostáva z hlavičky a sektorov rovnakej dĺžky. Ak chcete zistiť veľkosť sektora, musíte prečítať dvojbajtové číslo s posunom 30 od začiatku súboru a zvýšiť 2 na mocninu tohto čísla. Toto číslo musí byť buď 9 (0x0009) alebo 12 (0x000C), veľkosť sektora súboru je 512 alebo 4096 bajtov. Po nájdení sektora musíte skontrolovať nasledujúcu rovnosť:

(Veľkosť súboru - 512) mod SectorSize = 0

Ak táto rovnosť nie je splnená, môžete uviesť skutočnosť, že sa súbory zlučujú. Táto metóda má však významnú nevýhodu. Ak útočník pozná veľkosť sektora, potom stačí prilepiť svoj súbor a n viac bajtov, aby veľkosť zlepených údajov bola násobkom veľkosti sektora.

Neznámy typ sektora

Ak útočník vie o metóde, ako obísť predchádzajúcu kontrolu, potom túto metódu dokáže zistiť prítomnosť sektorov s nedefinovanými typmi.

Definujme rovnosť:

FileSize = 512 + CountReal * SectorSize, kde FileSize je veľkosť súboru, SectorSize je veľkosť sektora, CountReal je počet sektorov.

Definujeme aj nasledujúce premenné:

  1. CountFat - počet sektorov FAT. Nachádza sa v posune 44 od začiatku súboru (4 bajty);
  2. CountMiniFAT - počet sektorov MiniFAT. Nachádza sa v posune 64 od začiatku súboru (4 bajty);
  3. CountDIFAT - počet sektorov DIFAT. Nachádza sa v posune 72 od začiatku súboru (4 bajty);
  4. CountDE je počet sektorov záznamu adresára. Ak chcete nájsť túto premennú, musíte nájsť prvý sektor DE, ktorý sa nachádza na ofsete 48. Potom musíte získať úplné zastúpenie DE z FAT a spočítať počet DE sektorov;
  5. CountStreams - počet sektorov s dátovými tokmi;
  6. CountFree - počet voľných sektorov;
  7. CountClassified - počet sektorov s konkrétnym typom;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Je zrejmé, že s nerovnosťou CountClassified a CountReal môžeme dospieť k záveru, že súbory môžu byť zlúčené.

Funkčný kód (FC) v hlavičke telegramu identifikuje typ telegramu, ako je telegram žiadosti (požiadavka alebo odoslanie / požiadavka) a telegram potvrdenia alebo odpovede (rámec potvrdenia, rámec odpovede). Okrem toho kód funkcie obsahuje aktuálnu funkciu prenosu a riadiace informácie, ktoré zabraňujú strate a duplikácii správ, alebo typ stanice so stavom FDL.

7 6 5 4 3 2 1 0 FC: Žiadosť o kód funkcie
1 Vyžiadajte si telegram
X FCV = Zapnutý striedavý bit
X href = "http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit"> FCB = Alternujúci bit (z počtu snímok)
1 0 (0x0) CV = hodnota hodín ()
1 iné Rezervované
0 0 (0x0) TE = časová udalosť (synchronizácia hodín)
0 3 (0x3) SDA_LOW = Odoslanie údajov potvrdené - nízka priorita
0 4 (0x4) SDN_LOW = Odoslanie údajov nie je potvrdené - nízka priorita
0 5 (0x5) SDA_HIGH = Odoslanie údajov potvrdené - vysoká priorita
0 6 (0x6) SDN_HIGH = Odoslanie údajov nie je potvrdené
0 7 (0x7) MSRD = Odoslať údaje požiadavky s odpoveďou Multicast
0 9 (0x9) Požiadajte o status FDL
0 12 (0xC) SRD nízke = Odoslať a vyžiadať údaje
0 13 (0xD) SRD high = Odoslať a vyžiadať údaje
0 14 (0xE) Žiadosť Identifikujte s odpoveďou
0 15 (0xF) Požiadať o stav LSAP s odpoveďou 1)
0 iné Rezervované

1) táto hodnota je v poslednej verzii normy už nedefinovaná, ale iba vyhradená

7 6 5 4 3 2 1 0 FC: Odpoveď na kód funkcie
0 Telegram s odpoveďou
0 Rezervované
0 0 Otrok
0 1 Majster nie je pripravený
1 0 Majster pripravený, bez tokenu
1 1 Majster pripravený, v kruhu na žetóny
0 (0x0) OK
1 (0x1) UE = Chyba používateľa
2 (0x2) RR = Žiadne zdroje
3 (0x3) RS = SAP nie je povolený
8 (0x8) DL = Data Low (normálny prípad s DP)
9 (0x9) NR = Nie sú pripravené žiadne dáta odozvy
10 (0xA) DH = Data High (čaká sa na diagnostiku DP)
12 (0xC) RDL = Neprijaté údaje a nízke údaje
13 (0xD) RDH = Neprijaté údaje a Vysoké údaje
iné Rezervované

Frame Count Bit Bit počtu rámcov FCB ​​(b5) zabraňuje duplikácii správy potvrdzujúcou alebo odpovedajúcou stanicou (odpovedačom) a akejkoľvek strate volajúcej stanice (iniciátor). Z tohto sú vylúčené požiadavky bez potvrdenia (SDN) a požiadavky na stav FDL, identifikáciu a stav LSAP.

Pre bezpečnostnú sekvenciu musí mať iniciátor FCB pre každý respondent. Keď sa telegram s požiadavkou (Žiadosť alebo Odoslať / Žiadosť) odošle odpovedajúcemu prvýkrát alebo ak sa znova odošle odpovedajúcemu, ktorý je momentálne označený ako nefunkčný, musí byť FCB nastavený tak, ako je definované v odpovedi. Iniciátor to dosiahne v telegrame žiadosti s FCV = 0 a FCB = 1. Odpovedajúci musí vyhodnotiť telegram tohto druhu ako prvý cyklus správy a uložiť FCB = 1 spolu s adresou iniciátora (SA) (pozri nasledujúcu tabuľku). Tento cyklus správ nebude iniciátor opakovať. V nasledujúcich telegramoch žiadosti rovnakému respondentovi musí iniciátor nastaviť FCV = 1 a zmeniť FCB s každým novým telegramom žiadosti. Každý respondent, ktorý dostane telegram s požiadavkou, ktorý je mu adresovaný s FCV = 1, musí vyhodnotiť FCB. Ak sa FCB zmenil v porovnaní s posledným telegramom žiadosti od rovnakého iniciátora (rovnakého SA), je to platné potvrdenie, že predchádzajúci cyklus správ bol riadne uzavretý. Ak telegram požiadavky pochádza od iného iniciátora (iného SA), hodnotenie FCB už nie je potrebné. V oboch prípadoch musí respondent uložiť FCB so zdrojovým SA až do prijatia nového telegramu, ktorý je mu adresovaný. V prípade strateného alebo narušeného potvrdenia alebo telegramu odpovede nesmie iniciátor zmeniť FCB v opakovanom pokuse o požiadavku: bude to znamenať, že predchádzajúci cyklus správ bol chybný. Ak respondent dostane telegram s požiadavkou s FCV = 1 a rovnakým FCB ako posledný telegram s požiadavkou od rovnakého iniciátora (rovnakej SA), bude to znamenať opakovanie požiadavky. Respondent musí následne znova odoslať potvrdenie alebo telegram s odpoveďou, ktorý je pripravený. Až do vyššie uvedeného potvrdenia alebo prijatia telegramu s inou adresou (SA alebo DA), ktorá nie je potvrdená (Odoslať údaje bez potvrdenia, SDN), musí respondent držať posledný potvrdzovací alebo odpovedajúci telegram v pripravenosti na prípadný pokus o zopakovanie požiadavky. ... V prípade telegramov žiadosti, ktoré nie sú potvrdené, a so stavom žiadosti FDL, identifikáciou a stavom LSAP, FCV = 0 a FCB = 0; hodnotenie respondentom už nie je potrebné.

b5 b4 Bitová poloha
FCB FCV Podmienka Význam Akcia
0 0 DA = TS / 127 Žiadosť bez potvrdenia
Vyžiadať stav FDL / Ident / Stav LSAP
Vymazať posledné potvrdenie
0/1 0/1 DA # TS Žiadosť pre iného respondenta
1 0 DA = TS Prvá žiadosť FCBM: = 1
SAM: = SA
Vymazať posledné potvrdenie / odpoveď
0/1 1 DA = TS
SA = SAM
FCB # FCBM
Nová žiadosť Vymazať posledné potvrdenie / odpoveď
FCBM: = FCB
Podržte potvrdenie / odpoveď v pripravenosti na opakovanie
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Opakovať žiadosť FCBM: = FCB
Opakujte potvrdenie / odpoveď a pokračujte v pripravenosti
0/1 1 DA = TS
SA # SAM
Nový iniciátor FCBM: = FCB
SAM: = SA Podržanie potvrdenia / odpovede v pripravenosti na opakovanie

FCBM uložené FCB v pamäti SAM uložené SA v pamäti

Skenovanie vyhľadávania súborov známych typov (alebo, ako sa často hovorí, vyhľadávanie súborov podľa podpisov) je jedným z najúčinnejších, ktorý sa používa v nástroji na obnovu dát R-Studio. Použitie špecifikovaného podpisu umožňuje obnoviť súbory určitého typu v prípade, že informácie o štruktúre adresára a názvoch súborov čiastočne alebo úplne chýbajú (poškodené).

Na nájdenie súborov sa zvyčajne používa tabuľka oblastí disku. Ak porovnáte disk s knihou, tabuľka oddielov bude podobná jej obsahu. Pri skenovaní R-Studio hľadá súbory známych typov v tabuľke rozdelenia disku pomocou určitých špecifikovaných podpisov. Je to možné, pretože prakticky každý typ súboru má jedinečný podpis alebo vzor údajov. Podpisy súborov sa nachádzajú na špecifickom mieste na začiatku súboru a v mnohých prípadoch aj na konci súboru. R-Studio pri skenovaní porovnáva nájdené dáta s podpismi súborov známych typov, čo umožňuje ich identifikáciu a obnovu ich dát.

Pomocou technológie skenovania súborov známych typov vám R-Studio umožňuje obnoviť dáta z diskov, ktoré boli preformátované, ako aj z diskov, ktorých tabuľky oddielov boli prepísané. Navyše, ak dôjde k prepísaniu, poškodeniu alebo vymazaniu diskového oddielu, potom je jediným možným skenovanie súborov známych typov.

Ale takmer vždy a všetko má svoje nevýhody a súbory známych typov používané v R-Studio nie sú výnimkou. Takže pri skenovaní súborov známych typov vám R-Studio umožňuje obnoviť iba nefragmentované súbory, ale ako už bolo spomenuté, vo väčšine prípadov je to posledná možná metóda.

R-Studio už obsahuje podpisy najbežnejších typov súborov (zobrazenie úplný zoznam súbory známych typov, pozrite si časť online pomocníka R-Studio.)

V prípade potreby môže používateľ do R-Studia pridať nové typy súborov. Ak napríklad potrebujete nájsť súbory nejakého jedinečného typu alebo súbory vyvinuté po poslednom vydaní R-Studio, môžete do zoznamu známych typov súborov pridať svoje vlastné podpisy. O tomto procese sa bude diskutovať ďalej.

Vlastné súbory známych typov
Vlastné podpisy pre známe typy súborov sú uložené v súbore XML špecifikovanom v dialógovom okne Predvoľby. Pridanie podpisu má dve časti:

  1. Určenie podpisu súboru umiestneného na začiatku súboru, a ak existuje, na konci súboru.
  2. Vytvorenie súboru XML obsahujúceho podpis súboru a ďalšie informácie o type súboru.

To všetko je možné vykonať pomocou R-Studio. Zároveň nemusíte byť odborníkom v oblasti skladania (úpravy) XML dokumentov alebo v oblasti hexadecimálnej úpravy – v tomto návode (článku), zameranom na používateľa samotnej vstupnej úrovne, všetky stupne o tomto procese sa bude podrobne diskutovať.

Príklad: Pridanie podpisu pre súbor MP4 (kodek XDCam-EX)
Pozrime sa na pridanie podpisu súboru na príklade súboru .MP4 vytvoreného pomocou Sony XDCAM-EX. Využitie nájde napríklad v prípade poškodenej SD karty, ktorú ste si ešte nestihli uložiť na pevný disk počítača.

Prvý krok: Určenie podpisu súboru
Ak chcete určiť podpis súboru, zvážte príklady súborov rovnakého formátu.

Povedzme, že toto sú štyri video súbory od Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Pre pohodlie nech sú to malé súbory. Väčšie súbory je ťažšie zobraziť v hexadecimálnej podobe.

1. Otvorme súbory v R-Studio. Ak to chcete urobiť, kliknite na každý súbor kliknite pravým tlačidlom myši myšou a v kontextovej ponuke vyberte položku Zobraziť / Upraviť.

2. Porovnajme súbory. Budeme hľadať rovnaký vzor, ​​ktorý sa nachádza vo všetkých štyroch súboroch. On bude podpis súboru... Podpisy súboru sa zvyčajne nachádzajú na začiatku súboru, ale niekedy aj na konci.

3. Definujme podpis súboru na začiatku súboru. V našom príklade sa nachádza na samom začiatku súboru. Upozorňujeme, že to nie je vždy tak – podpis súboru je často na začiatku súboru, ale nie v prvom riadku (offset).

Obrázky nižšie ukazujú, že obsah všetkých štyroch súborov je odlišný, ale všetky začínajú rovnakým podpisom súboru.


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Zvýraznená oblasť na obrázkoch je podpis súboru tohto typu súbory. Je prezentovaný v textovej aj hexadecimálnej forme.

V textovej podobe vyzerá podpis súboru takto:
.... ftypmp42 .... mp42 ........ zadarmo

Bodky (.“) Označujú znaky, ktoré nemožno v texte zobraziť. Preto je potrebné uviesť aj hexadecimálnu formu podpisu súboru:
00 00 00 18 66 74 79 6D 70 34 32 00 00 00 00 6D 70 34 32 00 00 00 00 00 00 00 08 66 72 65 65

4. Definujme podpis súboru rovnakým spôsobom, ale na samom konci súboru. Môže to byť iný podpis súboru s inou dĺžkou.

Na obrázkoch nižšie je zvýraznený podpis súboru na konci súboru:


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Upozorňujeme, že údaje pred výberom (podpis súboru) sú rovnaké vo všetkých štyroch súboroch. Ide o technickú informáciu, ktorá nie je podpisom súboru, ale naznačuje, že všetky štyri snímky (súbory) boli nasnímané rovnakým fotoaparátom s rovnakými parametrami. Zvyčajne je možné rozlíšiť medzi zodpovedajúcimi vzormi technických informácií a podpismi súborov. V našom príklade v posledný riadok pred začiatkom podpisu súboru vidíme text „RecordingMode type =“ normal “, čo jasne naznačuje, že ide o nejaký parameter súboru, nie podpis. Vždy venujte osobitnú pozornosť tomuto riadku, aby ste sa vyhli chybnému zahrnutiu technická informácia k podpisu súboru.

V našom prípade je podpis súboru nasledujúci text:
...
Pripomeňme, že bodky predstavujú symboly, ktoré nemožno znázorniť v textovej forme.

V hexadecimálnom formáte vyzerá podpis súboru takto:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Poznámka: podpis nebude vždy na konci súboru.

Druhá fáza: Generovanie súboru XML s popisom známeho typu súboru
Teraz, keď ste definovali podpis súboru, môžete vytvoriť súbor XML a zahrnúť príslušný typ súboru s R-Studio. To možno vykonať dvoma spôsobmi:

2.1 Používanie vstavaného grafický editor podpisy súborov:
Vyberte položku Nastavenia z ponuky Nástroje, v dialógovom okne Nastavenia, ktoré sa otvorí, kliknite na kartu Známe typy súborov a potom kliknite na tlačidlo Upraviť typy súborov používateľa.

Kliknutím na obrázok ho zväčšíte

Kliknite na tlačidlo Vytvoriť typ súboru v dialógovom okne Upraviť typy súborov používateľa.
Nastavte nasledujúce parametre:

  • Id je jedinečný digitálny identifikátor. Toto číslo bude vybrané náhodne; jediná vec je, že sa nesmie zhodovať s digitálnym ID žiadneho iného typu súboru.
  • Group Description – skupina, ktorá bude obsahovať nájdené súbory v R-Studio. Môžete buď nastaviť novú skupinu, alebo vybrať jednu z tých, ktoré už existujú. Budeme mať túto skupinu „Multimediálne video“.
  • Popis - Stručný opis typ súboru. V našom príklade môžete použiť napríklad "Sony cam video, XDCam-EX".
  • Prípona – prípona tohto typu súborov. V našom prípade mp4.

Parameter Features je voliteľný, v našom prípade ho nemusíme používať.

Kliknutím na obrázok ho zväčšíte

Ďalej musíte zadať počiatočný a konečný podpis súboru. Ak to chcete urobiť, vyberte položku Začať a potom príkaz Pridať podpis z kontextovej ponuky.

Kliknutím na obrázok ho zväčšíte

Potom dvakrát kliknite na pole<пустая сигнатура> () a zadajte príslušný text.

Kliknutím na obrázok ho zväčšíte

Potom vytvorte podpis konečného súboru. Nezabudnite zadať 21 do stĺpca Od.

Kliknutím na obrázok ho zväčšíte

Úspešne ste vytvorili svoj vlastný podpis pre známy typ súboru.

Teraz ho musíte uložiť. Existujú dva spôsoby: buď ho môžete uložiť do predvoleného súboru zadaného na karte Hlavné v dialógovom okne Nastavenia kliknutím na tlačidlo Uložiť. Alebo kliknite na tlačidlo Uložiť ako ... a uložte podpis do iného súboru.

2.2 Manuálne vytvorenie súboru XML popisujúceho známy typ súboru:
Na tvorenie tohto súboru Použime XML verziu 1.0 a kódovanie UTF-8. Nezúfajte, ak neviete, čo to je - stačí otvoriť ľubovoľné textový editor(napríklad Notepad.exe) a do prvého riadku zadajte nasledujúci text:

Ďalej vytvoríme XML tag, ktorý definuje typ súboru (FileType). Vzhľadom na vyššie opísané atribúty XML bude značka vyzerať takto:

Vložíme ho hneď potom

Ďalej definujeme podpis súboru (tag ). Počiatočný podpis (na začiatku súboru) bude vo vnútri značky bez akýchkoľvek atribútov. Používame textovú formu podpisu, no zároveň nahrádzame hexadecimálne znaky, ktoré nie je možné znázorniť v textovej podobe. Pred každý hexadecimálny znak vložte "\ x". Takto značku s podpisom súboru by to vyzeralo takto:

Ak je k dispozícii, musíte definovať aj konečný podpis (na konci súboru). Na tento účel sa používa rovnaká značka, ale s prvkom „from“ a atribútom „end“. Bude to vyzerať takto:

Pripomeňme, že v podpise konečného súboru neboli žiadne netextové znaky, ale boli tam lomky a trojuholníkové zátvorky. Aby sme sa vyhli nejasnostiam a chybám v syntaxi XML, nahradíme v podpise znaky „/“, „.<" и ">„ich hexadecimálne hodnoty.

Na konci, po podpisoch súborov, musia byť záverečné značky FileType a FileTypeList:

Celý súbor by teda mal vyzerať takto:


\ x00 \ x00 \ x00 \ x18ftypmp42 \ x00 \ x00 \ x00 \ x00mp42 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x08 zadarmo
\ x3C \ x2FNonRealTimeMeta \ x3E \ x0D \ x0A \ x00

Pamätajte: V syntaxi XML sa rozlišujú malé a veľké písmená, takže značka je správna , ale nie .

Uložme súbor v textovom formáte s príponou .xml. Napríklad: SonyCam.xml.

Úspešne sme vytvorili vlastný podpis pre súbory známeho typu. Tento príklad postačuje na pochopenie základných princípov vytvárania vlastného typu súboru. Pokročilejší používatelia môžu použiť XML verziu 2.0. Viac sa o tom môžete dočítať v online pomocníkovi R-Studio.

Fáza 3: Kontrola a pridanie súboru popisujúceho známy typ súboru
Ďalším krokom je pridanie (nahranie) súboru XML do R-Studia. Zároveň sa automaticky skontroluje.

Načítajme súbor XML vytvorený v predchádzajúcom kroku do R-Studia. Ak to chcete urobiť, vyberte položku Nastavenia z ponuky Nástroje. V oblasti Typy súborov používateľa na karte Hlavné dialógového okna Nastavenia pridajte súbor XML, ktorý sme vytvorili (SonyCam.xml). Kliknite na tlačidlo Použiť.

Kliknutím na obrázok ho zväčšíte

2. Na žiadosť o nahranie nového typu súboru odpovedzte Áno.

Kliknutím na obrázok ho zväčšíte

3. Ak chcete overiť, či bol typ súboru úspešne načítaný, kliknite na kartu Známe typy súborov v dialógovom okne Nastavenia. Pripomeňme, že sme pridali typ súboru do skupiny Multimediálne video. Po rozšírení tejto skupiny (priečinku) by sme mali vidieť prvok s popisom, ktorý sme zadali pri vytváraní súboru XML: Sony cam video, XDCam-EX (.mp4).

Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Ak sú v syntaxi súboru nejaké chyby, zobrazí sa príslušná správa:

Kliknutím na obrázok ho zväčšíte

V takom prípade znova skontrolujte, či váš súbor XML neobsahuje chyby. Pamätajte: Syntax XML rozlišuje malé a veľké písmená a na konci každej značky musí byť koncová značka.

Fáza 4: Testovanie súboru popisujúceho známy typ súboru
Aby sme skontrolovali správnosť vlastného typu súboru, ktorý sme vytvorili, skúsme nájsť naše súbory .mp4 na vymeniteľnom USB kľúči.

1. V systéme Windows Vista alebo Windows 7 vykonáme úplné (nie rýchle) formátovanie disku alebo použijeme pomôcku na čistenie miesta na disku (napríklad R-Wipe & Clean) na úplné odstránenie všetky údaje na disku. Nechať byť USB disk naformátovaný na FAT32 (veľkosť hľadaných súborov nepresahuje 2 GB).

2. Skopírujeme testovacie súbory na disk a reštartujeme počítač, aby sa obsah vyrovnávacej pamäte uložil na disk. Môžete tiež vypnúť externý disk a potom ho znova zapojte.

3. V OS bude jednotka identifikovaná napríklad ako logická jednotka F: \.

4. Spustite R-Studio. Vyberte náš disk (F: \) a kliknite na tlačidlo Skenovať

Kliknutím na obrázok ho zväčšíte

5. V dialógovom okne Skenovať v oblasti (Systém súborov) kliknite na tlačidlo Zmeniť... a zrušte začiarknutie všetkých políčok. Zakážeme teda vyhľadávanie súborových systémov a súborov pomocou tabuľky oblastí.
Kliknutím na obrázok ho zväčšíte

6. Začiarknite políčko Extra vyhľadávanie známych typov súborov. To umožní R-Studio pri skenovaní vyhľadávať súbory známych typov.

7. Stlačením tlačidla Skenovať spustíte skenovanie.

8. Počkajme, kým R-Studio naskenuje disk. Na karte Informácie o kontrole sa zobrazí priebeh kontroly (priebeh).


Kliknutím na obrázok ho zväčšíte

9. Po dokončení skenovania vyberte položku Extra Found Files a dvakrát na ňu kliknite.


Kliknutím na obrázok ho zväčšíte

10. Naše testovacie súbory budú umiestnené v priečinku Sony cam video, XDCam-EX (alebo v priečinku s iným názvom, ktorý zodpovedá popisu typu súboru nastavenému v druhom kroku).


Kliknutím na obrázok ho zväčšíte

Môžete vidieť, že názvy súborov, dátumy a umiestnenie (priečinky) neboli obnovené, pretože táto informácia uložené v systém súborov... Preto R-Studio automaticky zobrazí každý súbor s novým názvom.

Môžete však vidieť, že obsah súborov nie je poškodený. Aby sme sa o tom presvedčili, otvorme ich vo vhodnom programe, napríklad VLC media player.


Kliknutím na obrázok ho zväčšíte

Záver
Schopnosť R-Studio vyhľadávať pri skenovaní súbory známych typov umožňuje obnoviť dáta aj z disku, ktorého súborové systémy sú buď alebo alebo sú prepísané. Súbory môžete efektívne vyhľadávať pomocou ich podpisov, čo je užitočné najmä vtedy, ak presne poznáte typ obnovovaných súborov, ako napríklad v našom príklade. Schopnosť vytvárať vlastné typy súborov vám umožňuje pridať akýkoľvek súbor, ktorý má špecifický podpis súboru, do zoznamu známych typov súborov.

Koncept " Magické číslo"Má tri významy v programovaní:

  • Podpis údajov
  • Pridelené jedinečné hodnoty, ktoré nesmú byť rovnaké ako ostatné hodnoty (napr. UUID)
  • Zlá prax programovania.

Podpis údajov

Magické číslo, alebo podpis, je celé číslo alebo textová konštanta používaná na jedinečnú identifikáciu zdroja alebo údajov. Takéto číslo samo o sebe nenesie žiadny význam a môže spôsobiť zmätok, ak sa v programovom kóde vyskytne bez príslušného kontextu alebo komentára, zatiaľ čo pokus o jeho zmenu na iné, čo i len blízke hodnoty, môže viesť k absolútne nepredvídateľným následkom. Z tohto dôvodu sa takéto čísla ironicky nazývali mágia. V súčasnosti je tento názov pevne zakorenený ako pojem. Napríklad každá kompilovaná trieda jazyka Java začína hexadecimálnym magickým číslom 0xCAFEBABE. Druhým známym príkladom je akýkoľvek spustiteľný súbor OS Microsoft Windows s príponou .exe začína bajtovou sekvenciou 0x4D5A (čo zodpovedá znakom ASCII MZ - iniciálam Marka Zbikowského, jedného z tvorcov MS-DOS). Menej známym príkladom je neinicializovaný ukazovateľ v Microsoft Visual C++ (od roku 2005 Verzie spoločnosti Microsoft Visual Studio), ktorý má v režime ladenia adresu 0xDEADBEEF.

Na úrovni UNIX operačné systémy typ súboru je zvyčajne určený podpisom súboru, bez ohľadu na príponu jeho názvu. Poskytujú štandardný súborový nástroj na interpretáciu podpisu súboru.

Zlá prax programovania

Zlou programátorskou praxou sa nazýva aj „magické čísla“, keď sa v zdrojovom kóde objaví číselná hodnota a nie je jasné, čo znamená. Napríklad takýto úryvok napísaný v jazyku Java by bol zlý:

drawSprite (53, 320, 240);

final int SCREEN_WIDTH = 640; final int SCREEN_HEIGHT = 480; final int SCREEN_X_CENTER = SCREEN_WIDTH / 2; final int SCREEN_Y_CENTER = SCREEN_HEIGHT / 2; final int SPRITE_CROSSHAIR = 53; ... drawSprite (SPRITE_CROSSHAIR, SCREEN_X_CENTER, SCREEN_Y_CENTER);

Teraz je to jasné: tento riadok zobrazuje spritu v strede obrazovky - nitkový kríž zameriavača. Vo väčšine programovacích jazykov sa všetky hodnoty použité pre takéto konštanty vypočítajú v čase kompilácie a nahradia sa na miestach, kde sa hodnoty používajú. Preto takáto zmena zdrojového textu nezhoršuje výkon programu.

Okrem toho sú magické čísla potenciálnym zdrojom programových chýb:

  • Ak je to isté magické číslo v programe použité viackrát (alebo sa môže potenciálne použiť), potom jeho zmena bude vyžadovať opravy každého výskytu (namiesto jednej úpravy hodnoty pomenovanej konštanty). Ak nie sú opravené všetky výskyty, vyskytne sa aspoň jedna chyba.
  • Minimálne v jednom z výskytov mohlo byť magické číslo na začiatku nesprávne napísané, čo je dosť ťažké odhaliť.
  • Magické číslo môže závisieť od implicitného parametra alebo iného magického čísla. Ak tieto závislosti, ktoré nie sú explicitne pridelené, nie sú splnené, vyskytne sa aspoň jedna chyba.
  • Pri úprave výskytov jedného magického čísla je možné omylom zmeniť iné magické číslo, ktoré je nezávislé, ale má rovnakú číselnú hodnotu.

Magické čísla a multiplatformové

Magické čísla niekedy poškodzujú kód naprieč platformami. Faktom je, že v C v 32- a 64-bitových operačných systémoch je zaručená veľkosť typov char, short a long long, pričom veľkosť int, long, size_t a ptrdiff_t sa môže meniť (v prvých dvoch v závislosti od preferencie vývojárov kompilátora, pre posledné dva - v závislosti od bitovej kapacity cieľového systému). Starý alebo nekvalifikovaný kód môže obsahovať „magické čísla“ znamenajúce veľkosť nejakého typu – pri prechode na stroje s inou bitovou hĺbkou môžu viesť k jemným chybám.

Napríklad:

const size_t NUMBER_OF_ELEMENTS = 10; dlhé [NUMBER_OF_ELEMENTS]; memset (a, 0, 10 x 4); // zle - predpokladá sa, že dĺžka je 4 bajty, použije sa magický počet prvkov memset (a, 0, NUMBER_OF_ELEMENTS * 4); // zle - predpokladá sa, že dĺžka je 4 bajty memset (a, 0, NUMBER_OF_ELEMENTS * sizeof (long)); // nie úplne správne - duplikácia názvu typu (ak sa typ zmení, budete musieť zmeniť aj tu) memset (a, 0, NUMBER_OF_ELEMENTS * veľkosť (a [0])); // správne, optimálne pre dynamické polia s nenulovou veľkosťou memset (a, 0, veľkosť (a)); // správne, optimálne pre statické polia

Čísla, ktoré nie sú magické

Nie všetky čísla je potrebné previesť na konštanty. Napríklad kód pre

Šéfovia mi dali celkom zaujímavú úlohu. V krátkom čase napíšte analyzátor pre spustiteľné súbory, ktorý by dokázal nájsť telá vírusov podľa signatúr a určiť použitý packer / kryptor. Hotový prototyp sa objavil v priebehu niekoľkých hodín.

Slovo autora

Analýza podpisu

Hľadanie škodlivého objektu podľa podpisu je niečo, čo dokáže každý antivírus. Vo všeobecnosti je podpis formalizovaný popis niektorých znakov, podľa ktorých možno určiť, že naskenovaný súbor je vírus a vírus je celkom jednoznačný.

Sú tu rôzne techniky. Prípadne použite podpis zložený z N bajtov škodlivého objektu. V tomto prípade môžete urobiť nie hlúpe porovnanie, ale porovnanie pomocou nejakej masky (napríklad hľadať bajty EB ??? CD 13). Alebo nastavte ďalšie podmienky ako „také a také bajty musia byť na vstupnom bode do programu“ a podobne. Malvariho podpis je špecifický.

Rovnakým spôsobom sú opísané niektoré znaky, pomocou ktorých je možné určiť, že spustiteľný súbor je zabalený s jedným alebo druhým kryptorom alebo balíčkom (napríklad banálny ASPack). Ak ste pozorne čítali náš časopis, určite ste už počuli o takom nástroji, akým je PEiD, ktorý je schopný detekovať najčastejšie používané packery, kryptory a kompilátory (v databáze je veľké množstvo podpisov) pre prenášaný PE súbor k tomu. Žiaľ, nové verzie programu už dlho nevychádzajú a nedávno sa na oficiálnej stránke objavila správa, že projekt nebude mať ďalší vývoj. Je to škoda, pretože možnosti PEiD (najmä vzhľadom na systém doplnkov) by mi mohli byť užitočné. Po krátkej analýze sa ukázalo, že to neprichádza do úvahy. Ale po prehrabaní blogov v anglickom jazyku som rýchlo našiel to, čo mi vyhovovalo. projekt YARA (code.google.com/p/yara-project).

čo je YARA?

Od samého začiatku som bol presvedčený, že niekde na webe už existuje vývoj s otvoreným zdrojovým kódom, ktorý si vezme za úlohu určiť súlad medzi určitým podpisom a vyšetrovaným súborom. Ak by som našiel takýto projekt, mohol by sa ľahko umiestniť na koľajnice webovej aplikácie, pridať tam rôzne podpisy a získať to, čo sa odo mňa vyžaduje. Plán sa mi zdal ešte realistickejší, keď som si prečítal popis projektu YARA.

Samotní vývojári ho umiestňujú ako nástroj, ktorý pomáha výskumníkom malvéru identifikovať a klasifikovať škodlivé vzorky. Výskumník môže vytvárať popisy pre odlišné typy malvér pomocou textu alebo binárnych vzorov, ktoré popisujú formalizované znaky malvéru. Takto sa získavajú podpisy. V skutočnosti každý popis pozostáva zo sady riadkov a nejakého logického výrazu, na základe ktorého je určená spúšťacia logika analyzátora.

Ak sú pre skúmaný súbor splnené podmienky niektorého z pravidiel, určí sa podľa toho (napríklad taký a taký červ). Jednoduchý príklad pravidla, aby ste pochopili, o čo ide:

pravidlo tichý_bankár: bankár
{
meta:
popis = "Toto je len príklad"
úroveň_vlákna = 3
in_the_wild = pravda
reťazce:
$ a = (6A 40 68 00 30 00 00 6A 14 8D 91)
$ b = (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$ c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
podmienka:
$ a alebo $ b alebo $ c
}

V tomto pravidle hovoríme YARA, že každý súbor, ktorý obsahuje aspoň jeden zo vzorových reťazcov opísaných v premenných $ a, $ b, $ c, by mal byť klasifikovaný ako silent_banker trójsky kôň. A toto je veľmi jednoduché pravidlo. V skutočnosti môžu byť rolky oveľa komplikovanejšie (o tom si povieme nižšie).
O autorite projektu YARA hovorí aj zoznam projektov, ktoré ho využívajú, a to:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Sledujeme vašu webovú stránku (wewatchyourwebsite.com).

Všetok kód je napísaný v jazyku Python a používateľovi sa ponúka samotný modul na použitie pri vývoji a iba spustiteľný súbor na použitie YARA ako nezávislej aplikácie. V rámci mojej práce som zvolil prvú možnosť, ale pre jednoduchosť v článku budeme analyzátor používať jednoducho ako konzolovú aplikáciu.

Po malom hrabaní som rýchlo prišiel na to, ako napísať pravidlá pre YARA, ako aj ako k nemu pripojiť podpisy vírusov z free averu a packerov z PEiD. Ale začneme s inštaláciou.

Inštalácia

Ako som povedal, projekt je napísaný v jazyku Python, takže ho možno jednoducho nainštalovať na Linux, Windows a Mac. Najprv si môžete vziať binárne číslo. Ak zavoláme aplikáciu v konzole, dostaneme pravidlá pre spustenie.

$ yara
použitie: yara ... ... SÚBOR | PID

To znamená, že formát volania programu je nasledovný: najprv príde názov programu, potom zoznam možností, po ktorom je uvedený súbor s pravidlami, a na samom konci - názov skúmaného súboru. (alebo adresár obsahujúci súbory) alebo identifikátor procesu. Teraz by som rád vysvetlil, ako sú tieto pravidlá zostavené, ale nechcem vás hneď zaťažovať suchou teóriou. Preto budeme konať inak a požičiame si podpisy iných ľudí, aby YARA mohla vykonávať jednu z našich úloh - plnohodnotnú definíciu vírusov pomocou podpisov.

Váš antivírus

Najdôležitejšia otázka: kde získať databázu podpisov známych vírusov? Antivírusové spoločnosti aktívne zdieľajú takéto databázy medzi sebou (niektoré štedrejšie, niektoré menej). Aby som bol úprimný, najprv som dokonca pochyboval, že niekde na webe niekto otvorene pridáva takéto veci. Ako sa však ukázalo, existujú milí ľudia. Vhodný základ z populárny antivírus ClamAV je k dispozícii pre každého (clamav.net/lang/en). V sekcii "Najnovšie stabilné vydanie" nájdete odkaz na Najnovšia verzia antivírusový produkt, ako aj odkazy na stiahnutie vírusových databáz ClamAV. Nás budú zaujímať predovšetkým súbory main.cvd (db.local.clamav.net/main.cvd) a daily.cvd (db.local.clamav.net/daily.cvd).

Prvá obsahuje hlavnú základňu podpisov, druhá - v súčasnosti najkompletnejšiu základňu rôzne doplnky... Na tento účel úplne postačí Daily.cvd, ktorý obsahuje viac ako 100 000 prenesených škodlivých kódov. Základňa ClamAV však nie je základňou YARA, takže ju musíme previesť na požadovaný formát... Ale ako? O formáte ClamAV či formáte Yara totiž zatiaľ nič nevieme. O tento problém sme sa už postarali prípravou malého skriptu, ktorý prevedie základňu vírusových podpisov ClamAV na sadu pravidiel YARA. Scenár sa volá clamav_to_ yara.py a napísal ho Matthew Richard (bit.ly/ij5HVs). Stiahnite si skript a skonvertujte databázy:

$ python clamav_to_yara.py -f daily.cvd -o clamav.yara

V dôsledku toho získame podpisový základ v súbore clamav.yara, ktorý bude okamžite pripravený na použitie. Teraz vyskúšame kombináciu YARA a bázy od ClamAV v akcii. Skenovanie priečinka pomocou podpisu sa vykonáva jediným príkazom:

$ yara -r clamav.yara / pentest / msf3 / data

Voľba -r označuje, že kontrola by sa mala vykonávať rekurzívne cez všetky podpriečinky aktuálneho priečinka. Ak sa v priečinku / pentest / msf3 / data nachádzali telá vírusov (aspoň tie v databáze ClamAV), spoločnosť YARA vás o tom okamžite informuje. V podstate ide o hotový skener podpisov. Pre väčšie pohodlie som napísal jednoduchý skript, ktorý skontroloval aktualizácie databázy z ClamAV, stiahol nové podpisy a previedol ich do formátu YARA. Ale to sú už detaily. Jedna časť úlohy je dokončená, teraz môžete začať zostavovať pravidlá pre definovanie baličov / kryptorov. Ale kvôli tomu som sa s nimi musel trochu vysporiadať.

Hra podľa pravidiel

Pravidlo je teda hlavným mechanizmom programu, ktorý vám umožňuje priradiť daný súbor do akejkoľvek kategórie. Pravidlá sú popísané v samostatný súbor(alebo súbory) a svojím vzhľadom veľmi pripomínajú konštrukciu struct () z jazyka C / C ++.

vládnuť BadBoy
{
reťazce:
$ a = "win.exe"
$ b = "http://foo.com/badfi le1.exe"
$ c = "http://bar.com/badfi le2.exe"
podmienka:
$ a a ($ b alebo $ c)
}

Pri písaní pravidiel v zásade nie je nič ťažké. V rámci tohto článku som sa dotkol iba hlavných bodov a podrobnosti nájdete v príručke. Medzitým desať najdôležitejších bodov:

1. Každé pravidlo začína kľúčové slovo pravidlo, za ktorým nasleduje identifikátor pravidla. Identifikátory môžu mať rovnaké názvy ako premenné v C / C ++, to znamená, že môžu pozostávať z písmen a číslic a prvý znak nemôže byť číslica. Maximálna dĺžka názvu identifikátora je 128 znakov.

2. Pravidlá sa zvyčajne skladajú z dvoch sekcií: sekcie reťazcov a sekcie podmienok. V sekcii strings sa nastavia údaje, na základe ktorých sekcia podmienok rozhodne, či daný súbor spĺňa určité podmienky.

3. Každý riadok v sekcii strings má svoj vlastný identifikátor, ktorý začína znakom $ – vo všeobecnosti ako deklarovanie premennej v php. YARA podporuje bežné reťazce uzavreté v úvodzovkách ("") a hexadecimálne reťazce uzavreté v rovnátka(()), ako aj regulárne výrazy:

$ my_text_string = "text tu"
$ my_hex_string = (E2 34 A1 C8 23 FB)

4. Časť podmienky obsahuje všetku logiku pravidla. Táto sekcia musí obsahovať boolovský výraz, ktorý určuje, kedy sa súbor alebo proces zhoduje s pravidlom. Táto časť sa zvyčajne vzťahuje na predtým deklarované reťazce. A s identifikátorom reťazca sa zaobchádza ako s boolovskou premennou, ktorá vracia hodnotu true, ak sa reťazec našiel v pamäti súboru alebo procesu, a inak vracia hodnotu false. Vyššie uvedené pravidlo určuje, že súbory a procesy obsahujúce reťazec win.exe a jednu z dvoch adries URL by mali byť kategorizované ako BadBoy (podľa názvu pravidla).

5. Hexadecimálne reťazce umožňujú tri konštrukcie, vďaka ktorým sú flexibilnejšie: zástupné znaky, skoky a alternatívy. Substitúcie sú miesta v reťazci, ktoré sú neznáme a na ich mieste môže byť ľubovoľná hodnota. Sú označené symbolom "?":

$ hex_string = (E2 34 ?? C8 A? FB)

Tento prístup je veľmi užitočný na špecifikovanie reťazcov, ktorých dĺžka je známa, ale obsah sa môže líšiť. Ak časť reťazca môže mať rôznu dĺžku, je vhodné použiť rozsahy:

$ hex_string = (F4 23 62 B4)

Tento záznam znamená, že v strede riadku môže byť 4 až 6 rôznych bajtov. Je možné implementovať aj alternatívne voľby:

$ hex_string = (F4 23 (62 B4 | 56) 45)

To znamená, že na mieste tretieho bajtu môže byť 62 B4 alebo 56, takýto záznam zodpovedá riadkom F42362B445 alebo F4235645.

6. Ak chcete skontrolovať, či je daný reťazec v špecifickom posune v priestore adries súboru alebo procesu, použite príkaz at:

$ a pri 100 a $ b pri 200

Ak reťazec môže byť v špecifickom rozsahu adries, použije sa operátor in:

$ a in (0..100) a $ b in (100..fi veľkosť)

Niekedy nastanú situácie, keď je potrebné určiť, že súbor má obsahovať určité číslo z danej množiny. Toto sa vykonáva pomocou operátora of:

pravidlo Príkladu1
{
reťazce:
$ foo1 = "figurína1"
$ foo2 = "dummy2"
$ foo3 = "dummy3"
podmienka:
2 z ($ foo1, $ foo2, $ foo3)
}

Vyššie uvedené pravidlo vyžaduje, aby súbor obsahoval ľubovoľné dva riadky z množiny ($ foo1, $ foo2, $ foo3). Namiesto zadania konkrétneho počtu riadkov v súbore môžete použiť premenné any (aspoň jeden riadok z danej množiny) a všetky (všetky riadky z danej množiny).

7. No a poslednou zaujímavou vlastnosťou, ktorú treba zvážiť, je aplikácia jednej podmienky na veľa reťazcov. Táto funkcia je veľmi podobná funkcii operátora, len výkonnejšia je funkcia operátora for..of:

pre výraz string_set: (booleovský_výraz)

Tento záznam by sa mal čítať nasledovne: z reťazcov špecifikovaných v string_set musia aspoň časti výrazu spĺňať podmienku boolean_expression. Alebo inými slovami: boolean_expression sa vyhodnotí pre každý reťazec zo sady string_set a výraz musí vrátiť hodnotu True. Ďalej túto konštrukciu zvážime na konkrétnom príklade.

Vytváranie PEiD

Takže, keď sa všetko viac-menej vyjasnilo s pravidlami, môžete začať implementovať detektor packerov a kryptorov do nášho projektu. Najprv som si ako zdrojový materiál požičal podpisy známych baličov z rovnakého PEiD. Priečinok plugins obsahuje súbor userdb.txt, ktorý obsahuje to, čo potrebujeme. V mojej databáze bolo 1850 podpisov.

Pomerne veľa, takže ak ich chcete úplne importovať, odporúčam vám napísať nejaký skript. Formát tejto databázy je jednoduchý - používa sa obvyklý. textový súbor, ktorý uchováva záznamy formulára:


podpis = 50 E8 ?? ?? ?? ?? 58 25 ?? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
ep_only = true

Prvý riadok nastavuje názov baliča, ktorý sa bude zobrazovať v PEiD, ale pre nás to bude identifikátor pravidla. Druhým je samotný podpis. Tretím je príznak ep_only označujúci, či sa má vyhľadávať daný riadok iba na adrese vstupného bodu alebo v celom súbore.

No, skúsme vytvoriť pravidlo pre, povedzme, ASPack? Ako sa ukázalo, nie je to ťažké. Najprv si vytvorte súbor na uloženie pravidiel a pomenujte ho, napríklad packers.yara. Potom v databáze PEiD vyhľadáme všetky podpisy, v mene ktorých sa ASPack objavuje a prenesieme ich do pravidla:

pravidlo ASPack
{
reťazce:
$ = (60 E8 ??? ??? ??? 5D 81 ED ??? (43 | 44) ?? B8 ???
$ = (60 EB ?? 5D EB ?? FF ??? ???? ???? E9)
[.. vystrihnúť..]
$ = (60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01)
podmienka:
pre ktorúkoľvek z nich: ($ na vstupnom bode)
}

Všetky nájdené položky majú príznak ep_only nastavený na hodnotu true, to znamená, že tieto riadky sa musia nachádzať na adrese vstupného bodu. Preto napíšeme nasledujúcu podmienku: "pre ktorúkoľvek z nich: ($ na vstupnom bode)".

Teda prítomnosť aspoň jedného z dané riadky na adrese vstupného bodu bude znamenať, že súbor je zabalený s ASPack. Všimnite si tiež, že v tomto pravidle sú všetky reťazce jednoducho špecifikované pomocou znaku $ bez identifikátora. Je to možné, pretože v časti podmienky neuvádzame žiadnu konkrétnu z nich, ale používame celú množinu.

Ak chcete skontrolovať výkon výsledného systému, stačí spustiť príkaz v konzole:

$ yara -r packers.yara somefi le.exe

Po naplnení niekoľkých aplikácií balených s ASPack som sa uistil, že všetko funguje!

Pripravený prototyp

YARA sa ukázala ako mimoriadne jasný a transparentný nástroj. Nebolo pre mňa príliš ťažké napísať web admin panel a nastaviť ho ako webovú službu. Trochu kreativity a suché výsledky analyzátora sú už zafarbené rôznymi farbami, čo naznačuje stupeň nebezpečenstva nájdeného malvéru. K dispozícii je malá aktualizácia základne a pre mnohé z kryptorov krátky popis a niekedy aj návod na rozbalenie. Prototyp je vytvorený a funguje perfektne a šéfovia tancujú od radosti!