Haluan aloittaa tämän artikkelin sanomalla, että jos olet kuten minä, uusi haittaohjelmien analyysi ja budjetti, opiskelu ilman pääsyä kurssimateriaalia ei ehkä ole paras vaihtoehto sinulle. Paras tapa suorittaa SANS GREM -sertifikaatti ilman kurssin rahoituslähdettä on hakea SANS:n Work Study -ohjelmaan FOR610-kurssia varten. Vastineeksi siitä, että avustat kurssin opettajaa, saat arvioida kurssin ja yrittää sertifiointikokeen. Saat myös kopiot kirjoista ja kurssimateriaaleista, joita ei voi hankkia muulla tavoin kurssimateriaalin jakamista koskevan SANS:n politiikan vuoksi. Tämän ohjelman kokonaiskustannukset ovat itse asiassa alhaisemmat kuin mitä maksoin omasta pussistani pelkästä tentistä.
Työskentelyopiskeluohjelmaan osallistuminen edellyttää kuitenkin, että hakemuksesi hyväksytään ja että voit osallistua SANS:n konferenssiin kuuden päivän ajan. En käyttänyt tätä vaihtoehtoa, koska alueellani järjestetyt SANS-konferenssit olivat ristiriidassa muiden tärkeiden asioiden kanssa aikataulussani. En myöskään pitänyt sopivana pyytää työnantajaani kattamaan kurssin kustannuksia, koska se ei liittynyt suoraan projektitehtäviini. Näistä syistä SANS-koulutus ei tullut kysymykseen.
Nyt kun olen selvittänyt, miksi tein niin kuin tein, siirrymme ”miten”.
Mitä minun piti oppia
Suoraan SANS:n verkkosivuilta, tarvitsemaani GREM-koulutusta varten:
- Windows assembly -konseptit reverse engineeringiä varten – Mitä teet IDA Prossa, miksi tarvitset assembly- ja C-osaamista
- Windowsin haittaohjelmien yleiset ominaisuudet – API-toiminnot, säikeet, rakenteet
- Haitallisten ja suojattujen suoritettavien tiedostojen syvällinen analyysi – Mitä teet IDA Prossa harjoittelun jälkeen
- Haitallisten asiakirjojen analyysi – Hyökkääjät laittavat skriptejä tiedostoihin
- Haitallisten verkkoselaimen skriptien analyysi – Hyökkääjät laittavat skriptejä Internetiin, Command and control traffic flows over the wire
- Muistitiedustelu – Volatiliteetti
Kokoonpanokielen ja C:n merkitys
Ennen kuin siirryn eri resursseihin, joita käytin valmistautuakseni tenttiin, haluan todeta, että on elintärkeää, että x86-kokoonpanokielestä on vähintäänkin horjuva käsitys. Ilman sitä ei todellakaan voi tehdä käänteiskonstruktiota kannettavasta suoritettavasta ohjelmasta tai shellkoodista. Tämä ei oikeastaan ole niin paha asia kuin miltä se näyttää, sillä assembly on pohjimmiltaan vain aritmetiikkaa, joka saa tietokoneet tekemään asioita. Kaikki mitä sinun tarvitsee tietää aloittaaksesi binäärisen käänteistekniikan opettelun on x86-rekisterit, muuttujatyypit (word, dword, int, char jne.), pinon perusteet ja joitakin ohjelman kulkua koskevia ohjeita. Tässä on resurssi, jonka löysin hyödylliseksi perusasioiden oppimisessa:
C:n osaaminen on tärkeää, mutta tiedät suurimman osan tarvitsemistasi asioista, jos osaat ohjelmoida jollakin C:n kaltaisella kielellä, kuten Javalla. Ainoat uudet käsitteet, joita tarvitset haittaohjelmien takaisinsuunnittelussa, ovat osoittimet, muistin allokointi ja kasa. Opin tarvitsemani näiden kahden resurssin avulla:
Reverse Engineering ”Reverse Engineering”
Päätin otsikoida tämän artikkelin ”Grey Box Testing” (harmaalaatikkotestaus), koska jälkikäteen katsottuna tajusin, että pohjimmiltaan juuri sitä tein opiskellessani tätä tenttiä varten. Koska olin uusi haittaohjelmien analysoinnissa, tiesin vain vähän siitä, mitä odottaa. Koko tenttiin valmistautumiseni ajan viittasin näihin tietolähteisiin:
- Kirjasuosituksia, joita kirjoittivat ne, jotka läpäisivät tentin maksamatta kurssista kolme tai viisi vuotta sitten
- SANS FOR610 -kurssin virallinen oppimäärä
- Lenny Zeltserin luomat haittaohjelmatiedostojen analyysin huijauslomakkeet
Jaottelen nämä kohdat osioihin osoittaakseni, mitä opettelin kustakin lähteestä.
Kirjasuositukset
Hyödyllisten kirjojen valitseminen on erittäin tärkeää GREM-menestyksen kannalta, koska saat ottaa niistä kourallisen mukaan GIAC-tentteihin referensseiksi. Useimmat GREM-sertifioinnin haltijat jakavat mielellään listan (muista kuin SANS-kirjoista), joita he käyttivät valmistautuessaan ihmisille, jotka ihmettelevät, mistä aloittaa tenttiin opiskelu. Ensimmäinen askeleeni oli tutustua mahdollisimman monen löytämäni GREM-tutkinnon suorittaneen suositeltujen lukemistojen luetteloihin. Useimmin suositellut kirjat olivat:
- ”Practical Malware Analysis” – Fantastinen opas käyttäytymisanalyysiin, reverse engineeringiin ja antianalyysin voittamiseen. Tämä kirja on ehdoton, et löydä lähdettä, joka ei suosittelisi sitä. Tietojen lisäksi mukana on erittäin hyödyllisiä harjoituksia, jotka vahvistavat tietämystäsi.
- ”The Malware Analyst’s Cookbook” – Opas lukuisiin erilaisiin haittaohjelmien analysointityökaluihin. Labrat ja skriptit ovat hyvin vanhentuneita, mutta työkalujen yleiskatsaukset olivat erittäin hyödyllisiä. Käytin muistitutkimusta, selainskriptihaittaohjelmia ja haitallisten asiakirjojen analysointia käsitteleviä osioita valmistautuakseni kokeeseeni.
- ”The Art of Memory Forensics” – Tämä ei välttämättä ole ensisijainen resurssi, vaan täydentävä resurssi ”Malware Analyt’s Cookbook” -kirjan muistitutkimusta käsittelevälle osiolle. Monia tarvitsemiasi Volatility-liitännäisiä ei käsitellä kovinkaan yksityiskohtaisesti, ja MAC:n tietoja tulisi verrata tämän kirjan tietoihin. Tässä kirjassa käsitellään myös paljon windowsin sisäisiä asioita, joista on hyötyä tentissä.
- ”Windows Internals 6 tai 7” – Henkilökohtaisesti olen sitä mieltä, että nämä kirjat ovat yliampuvia. Jos Windows on sinulle tuttu tietoturvan näkökulmasta, aiemmat kirjat riittävät Windows Internalsin ymmärtämiseen. En missään nimessä suosittelisi ottamaan näitä kirjoja mukaan tenttiin tai edes indeksoimaan sitä. Kaikki olennainen tieto on jo ”Art of Memory Forensics” -kirjassa tai MSDN-sivustolla.
- ”The IDA Pro Book” – En usko, että kukaan käskee sinua ottamaan tätä kirjaa mukaan tenttiin, mutta se, hyödynnätkö sitä lainkaan, on oikeastaan kysymys siitä, miten opit työkaluja. Itse opettelin IDA Pron PMA:n avulla ja vähän näpertelemällä vapaa-ajalla, joten en lopulta tarvinnut sitä. Jos opit työkaluja parhaiten lukemalla pitkiä kirjoja, joissa on vähän kuvia tai kuvitusta, tämä on täydellinen kirja sinulle.
The SANS FOR610 Syllabus
Tämä on aika yksinkertainen. SANS GREM-tentti on SANS FOR610 -kurssin yhteydessä järjestettävä tentti, joten on turvallista olettaa, että se, mitä opit kurssilla, on sitä, mitä tulet soveltamaan tentissä. Vaikka minulla ei ollut pääsyä kurssille, minulla oli pääsy SANSin verkkosivuilla olevaan opetussuunnitelmaan, joka on yleiskatsaus sekä kurssilla käsitellyistä aiheista että työkaluista. FOR610:n opetussuunnitelma oli hyödyllisempi työkalujen kuin aiheiden osalta, vaikka tämä ei päde kaikkiin SANSin DFIR-kursseihin. Joissakin näyttää olevan lueteltu vain vähän työkaluja, mutta niissä on jaottelu jokaisesta aiheesta. Luulen, että se riippuu siitä, kuinka tekninen vs. teoriapohjainen kurssi on.
Luettelo työkaluista opetussuunnitelmassa ei ehkä ole kattava, mutta se on ainoa luettelo, jonka saat. Tutustu jokaiseen listalla olevaan työkaluun, miltä ne näyttävät, miten ne toimivat ja mitä ne tekevät. Aloitan yleensä työkalun github-sivulta ja jatkan sieltä. ”The Malware Analyst’s Cookbook” ja Lenny Zeltserin verkkosivusto sisältävät molemmat loistavia työkaluviitteitä.
Tahdotko karsia, mitä sinun on tiedettävä tenttiä varten? Jos aihe vaikuttaa liian laajalta tai työkalu liian tärkeältä, jotta sitä ei mainittaisi opetussuunnitelmassa, sitä ei luultavasti ole kurssilla tai tentissä.
Lenny Zeltser’s Infosec Cheat Sheets
Lenny Zeltser, yksi SANS FOR610:n kouluttajista, joka auttoi sekä kurssin että tentin laatimisessa, julkaisee huijauslomakkeita aiheista, joita ovat muun muassa käänteinen käänteinen haittakoodin keksiminen (Reverse Engineering Malicious Code) ja haitallisten asiakirjojen analysointi. Nämä ovat sattumalta samoja aiheita, joihin viitataan sekä FOR610:n opetussuunnitelmassa että GREM:n verkkosivulla. Saattaa olla hyvä idea opiskella ja tehdä muistiinpanoja näiden huijauslomakkeiden sisällöstä.
Huijauslappu, joka voi todella auttaa sinua ”Practical Malware Analysis” -laboratorioissa ja x86-kokoonpanon kutsukäytännöissä:
Next Steps: Suosittelen seuraamaan ”Practical Malware Analysis” -kirjan harjoituksia ja ”The Malware Analyst’s Cookbook” -kirjan muistitutkimusosiota, kun luet näitä kirjoja. Tee labra joka ilta, labra joka toinen ilta, mikä tahansa sopii sinulle parhaiten. Harjoitteluaika on joustava, mutta harjoittelu ei ole vapaaehtoista. Harjoittelu on paras tapa vahvistaa materiaalin ymmärtämistä, varsinkin kun käsittelet paljon työkaluja. Paras tapa oppia työkaluja on käyttää niitä. Pahansuopaisten asiakirjojen rikostutkintaa varten voi olla hyödyllistä osallistua Didier Stevensin online-työpajoihin, sillä hän on kirjoittanut monet FOR610-opinto-ohjelmassa tämän jakson alla mainituista työkaluista.
Kaikkien laboratorioiden ja indeksoinnin välillä minun oli pidettävä aivotauko. Päätin tarttua aiheeseen, joka auttaisi minua tentissä, mutta veisi minut myös pois uuvuttavasta tenttivalmistautumisesta: perusloukkausten ja shellcoden kirjoittaminen. Palasin takaisin virkistyneenä ja motivoituneempana kuin koskaan kolmen viikon valmistautumisloman jälkeen. Suosittelen etsimään hauskan aiheen, joka koskettaa kokoonpanoa ja käänteistä suunnittelua, jota voit opetella, jos tunnet olosi uupuneeksi tai demotivoituneeksi.
Kun olet käynyt läpi kaikki käyttämäsi kirjat, tehnyt joitakin harjoituksia ja pitänyt aivotauon, on aika valmistautua ensimmäiseen harjoitustenttiin. Monet suosittelevat, ettei harjoituskokeessa käytetä hakemistoa, mutta minusta hakemiston luominen ennen harjoituskokeen yrittämistä on välttämätöntä. Osittain siksi, että harjoituskokeet voivat kertoa sinulle, missä aukkoja indeksissäsi on, osittain siksi, että indeksin tekeminen on paras tapa kerrata kaikki se tieto, jonka olet oppinut ehkä kuukausien opiskelun aikana.
Mikä on indeksi?
Viitekirjojesi ohella saat ottaa muistiinpanoja harjoituskokeeseen. Perinteisesti useimmat ihmiset ottavat tenttiin mukaan hakemiston kaikista lukemistaan kirjoista. Indeksit luodaan yleensä laskentataulukoiksi, joissa on suodatettuja sarakkeita. Suosittelen indeksin värikoodausta. Hakemiston tulisi sisältää kaikki tärkeät aiheet, kunkin aiheen sivunumerot ja muistiinpanot kustakin aiheesta. Indeksini sisälsi myös FOR610-alueen, johon oletin jokaisen aiheen kuuluvan. Merkinnöissäni korostin tärkeitä asioita, kuten Windows API -funktioita, rakenteita ja Volatility-liitännäisiä. Sivunumerot tulisi myös merkitä välilehdille kirjoissa, jotka otat tenttiin mukaan. Värikoodasin välilehdet vastaamaan hakemistoa, mikä oli suureksi avuksi, kun jotain piti etsiä nopeasti.
Tässä tentissä on paljon aiheita, joita käsitellään verkkolähteissä, mutta ei missään kirjoissa. Tykkään lisätä näitä aiheita koskevia muistiinpanoja hakemistoon tyhjällä sivunumerolla. Se on siistimpää kuin luoda erilliset muistiinpanolomakkeet jokaiselle aiheelle, joka ei sijaitse kirjassa.
Huomaa, että sinun indeksisi on luultavasti hyvin erilainen kuin minun, sillä löydät itsellesi parhaiten sopivan tyylin. Älä koskaan käytä toisen henkilön hakemistoa, sillä se on sekä SANS-ohjeiden vastaista että hyödytöntä opiskeluvälineenä, koska se ei ole sinun tekemäsi. Tästä samasta syystä suositellaan yleensä, että kurssin käyneet, joilla on SANS-kirjat, joissa on valmiit hakemistot, tekevät omansa sen sijaan, että käyttäisivät näitä hakemistoja. Älä koskaan kopioi mitään tietoja indeksiin suoraan verkkosivustolta tai sanasta sanaan kirjasta. Voit halutessasi tehdä tämän erilliselle muistiinpanolomakkeelle, mutta et indeksiin. Tämä ei ole sääntörikkomus, vain hyvä nyrkkisääntö. Kaiken hakemistossasi olevan pitäisi olla omin sanoin, omalla kädelläsi. Hakemiston luominen on elintärkeää tenttiin valmistautumisessa.
Mikä tahansa hakemisto, jonka luot ennen ensimmäistä harjoitustenttiä, tulee sisältämään aukkoja, varsinkin jos et ole käynyt kurssia. Älä pelkää mennä ensimmäiseen harjoituskokeeseen 20- tai 30-sivuisen hakemiston kanssa. Minä menin 25-sivuisen indeksin kanssa, mutta varsinaista tenttiä edeltävänä iltana indeksini oli yli 40-sivuinen.
Harjoituskokeet
Etukäteen: Ostakaa AINOASTAAN virallisia harjoitustenttiyrityksiä GIAC:n verkkosivuilta, www.giac.org. ÄLÄ KOSKAAN käytä mitään muuta lähdettä harjoituskokeisiin. Tämä on GIAC:n tenttiohjeiden mukaan kiellettyä ja sitä pidetään huijaamisena. Näissä epävirallisissa harjoituskokeissa käytetään varastettuja, vanhentuneita tenttikysymyksiä, eikä niitä pidä pitää opiskeluvälineenä. Osta virallisia harjoitustenttiyrityksiä täältä:
Nyt kun tämä on pois tieltä, suosittelen, että teet harjoitustentin ennen kokeen ostamista. Kokeen mukana tulee kaksi harjoituskoetta, mutta siihen mennessä olet käyttänyt 2000 dollaria, eikä sinulla ole aavistustakaan, oletko valmis kokeeseen. Ensimmäinen harjoitustentti on hyvä tapa selvittää, kuinka kaukana olet siitä, että voit ostaa kokeen. Jos läpäiset sen, suosittelen tutkinnon ostamista mahdollisimman pian. Jos et, se kertoo sinulle alueet, joilla olet heikko, jotta voit keskittyä niihin ennen kokeen ostamista.
Ensimmäinen ja sitä seuraavat harjoituskokeet ovat myös loistava tapa täyttää aukkoja rekisterissäsi. Kuten aiemmin mainitsin, FOR610:n opetussuunnitelma ei ole kattava, ja harjoituskokeet ovat ainoa tapa löytää työkaluja ja aiheita, joita sinun on opiskeltava lisää. Vältä kirjoittamasta indeksiisi vain sitä, mitä muistat vastauksista. Tämä on hyvä tapa läpäistä tulevat harjoituskokeet, sillä ne kaikki jakavat kysymyspankin. Se on myös loistava tapa epäonnistua oikeassa kokeessa. Tämän vuoksi en myöskään suosittele yli kolmen harjoituskokeen tekemistä, sillä vähenevä tuotto antaa sinulle vääränlaisen turvallisuuden tunteen. Käytä sen sijaan väärin tekemiäsi asioita lähtökohtana jatkotutkimukselle. Harjoituskokeet ovat myös loistava tapa selvittää, kuinka hyvin sinun on tunnettava kukin aihealue.
Harjoituskokeet tutustuttavat sinut myös siihen, miten GIAC-tentit toimivat. Olin uusi GIAC:ssa ja CompTIA:sta tuttu, joten en ollut valmistautunut ajatukseen, että monissa kysymyksissä olisi monta oikeaa vastausta ja yksi ”hyvä” vastaus. Minun oli myös opittava, milloin kysymykset voi jättää väliin. Sinulla on rajallinen määrä kysymyksiä, jotka voit ohittaa ja palata niihin myöhemmin, ja jos vastaat kysymykseen ja lähetät sen, et voi palata siihen. Kysymysten huolellinen lukeminen kuulostaa kliseeltä, mutta se oli oikeutettu taito, jota minun oli kehitettävä valmistautuakseni kokeeseen. Arvostan todella sitä, että GIAC:n kohdalla opiskelua, harjoittelua ja sovellettua vaivannäköä ei voi korvata missään vaiheessa.
Tiedä ennen oikean kokeen aikatauluttamista, että harjoitustentti on helpompi kuin oikea tentti, joten sinun pitäisi saada 5-10 pistettä korkeampi pistemäärä kuin sinun pitäisi. Tämä itse asiassa vaihtelee eri GIAC-tutkintojen välillä. Olen nähnyt monien, jotka ovat suorittaneet muita SANS DFIR -tutkintoja, sanovan, että heidän harjoituskokeensa olivat vaikeammat kuin heidän tenttinsä.
GIAC-tutkinnon ”hakemus”
Kun olet ostamassa GREM-tutkintoa, sinun on täytettävä hakemus ja odotettava kaksi päivää hyväksyntää, ennen kuin voit aikatauluttaa tai käyttää ilmaisia harjoituskokeita. Kukaan ei ole tainnut oikein paneutua siihen, mitä tähän kannattaa laittaa, mutta en stressaisi siitä. Epäilen, että he tuskin panevat kovin paljon painoa sille, millainen pätevyytesi on, mutta he luultavasti välittävät siitä, miten olet opiskellut ja mitä tuot tenttiin. Kun täytät hakemusta, ole rehellinen. Älä pelkää mainita muita kuin SANS-sertifiointeja, joita sinulla jo on, kursseja, joita olet käynyt heillä tai muilla, nykyistä asemaasi, kirjoja, joita käytit tenttiin valmistautumiseen, ja mihin indeksisi perustuu. Todennäköisesti sinut hyväksytään noin päivässä.
Tutkintoa kaduttaa
Minua kaduttaa eniten se, että olen luultavasti lykännyt kaiken verkkoon liittyvän käyttäytymisanalyysin ja skriptipohjaisten haittaohjelmien tekemistä viimeiseen sekuntiin. Olin valmistautumaton tähän osioon, ja vaikka läpäisinkin kokeen 81,3 %:lla, pistemääräni näissä osioissa olisi ollut paljon korkeampi, jos olisin harjoitellut enemmän sen sijaan, että olisin vain lukenut tähän aiheeseen liittyvää. Painotin liikaa suoritettavan analyysin merkitystä, vaikka tajusin, että tämä oli heikoin osa-alueeni. Suositukseni on keskittyä heikoimpiin alueisiin, jotka näkee harjoituskokeissa ennen kaikkea muuta.
Jatkotoimenpiteeni
Muistitietotekniikka, verkkoon liittyvä käyttäytymisanalyysi ja ytimen tilassa tapahtuva virheenkorjaus ovat kolme asiaa, joista haluaisin oppia lisää. Päätin osua näihin kaikkiin kerralla analysoimalla rootkitit. Julkaisen pian artikkelin siitä, miten perustaa laboratorio Win32-rootkitien analysointia varten, ja toisen artikkelin, jossa analysoin kernel-moodin rootkit-näytteen (luultavasti Cutwail, muutokset ovat mahdollisia) käyttäen käyttäytymisanalyysityökaluja, verkkotyökaluja, kuten INetSim, kernel-moodin virheenkorjausohjelmaa WinDBG ja Volatility-liitännäisiä rootkitin muistin analysointia varten.
Pitäisi luultavasti myös analysoida lisää dokumenttipohjaisia javascript- ja VB-makronäytteitä varmistaakseni, että ymmärrykseni tämäntyyppisten haittaohjelmien analysointiin käytetyistä tekniikoista on vankka.