Please note that I wrote this report on Malware Analysis and Reverse Engineering of Malware while a student at the National University of Mongolia.

Жич: Энэхүү тайланг МУИС-т оюутан байхдаа бичиж байв. Хэн нэгэнд хэрэгтэй байх болов уу гээд энд оруулав.

Тус ажлын хүрээнд Windows орчинд ажилладаг, үл мэдэгдэх malware-д анализ хийх замаар ажиллагааг нь олж мэдэх, гарал үүслийг нь мэдэж авах, түүнээс хамгаалж болох арга замуудыг олж мэднэ. Зорилгодоо хүрэхийн тулд динамик, статик анализ хийх зориулалттай төрөл бүрийн програмыг судалж, тэрхүү програмуудыг ашиглан malware дээр анализ хийж үзнэ.

Creative Commons Licence
This work is licensed under a Creative Commons Attribution 4.0 International License.


Malware analysis буюу “хөнөөлтэй програмын бүтэц үйл ажиллагааны дүн шинжилгээ” гэдэг нь ямарваа хөнөөлтэй програм буюу malware-гзадалж, ажиллагааг нь ойлгох, түүнийг илрүүлэх боломжтой болгох, цаашлаад түүнийг устгах арга замыг олох үйл ажиллагаа юм.

Reverse Engineering гэдэг нь ямарваа програм хангамжийн бэлэн болсон машин кодыг эргүүлээд өндөр төвшний програмчлалын хэлний төвшинд хөрвүүлж ойлгох явдал юм. Үндсэндээ програм хангамжийг бүтээх үе шат, алхмуудыг эсрэг талаас нь хийх ажиллагаа юм. Энэхүү процесст тухайн програм хангамжийг reverse хийхээс хамгаалсан механизмыг давж гарах үйл ажиллагаа орсон байна.

Гарчиг

  1. Гарчиг
  2. Ерөнхий ойлголт
    1. Анализын зорилго
    2. Malware analysis хийх аргууд
    3. Энгийн анализ
    4. Ахисан анализ
    5. Malware-г ангилах нь
  3. Лабораторийн орчин бүтээх
    1. Виртуал машин хэрэглэх
    2. Виртуал машины ажиллах зарчим
    3. Шаардлагатай болох VMware функц
    4. Туршилтийн хэсэгт хэрэглэх сүлжээний бүтэц
    5. REMnux
  4. Энгийн статик анализ
    1. Antivirus Scanning
    2. Hashing
    3. String analysis
    4. Linked Libraries, Functions
    5. Packing & Obfuscation
    6. String Obfuscation
    7. PE File Headers, Sections
  5. Энгийн динамик анализ
    1. Sandboxing
    2. Malware-г ажиллуулах
    3. Process Monitor
    4. Process Explorer
    5. Autoruns
    6. Regshot
    7. What's Running?
    8. Process Hacker
    9. DNS Spoofing
    10. IP хаяг хэрэглэдэг malware-тай тэмцэх
    11. Packet sniffing
    12. INetSim
  6. Жишээ динамик ба статик анализ
    1. Динамик анализ
    2. Сүлжээний орчинд динамик анализ хийх
    3. Статик анализ
  7. Executable-д patching хийх, түүний жишээ
  8. Өөр өөрийгөө хамгаалагч malware
    1. VMWare-г таних
    2. Анализаас хамгаалах
    3. TLS callback function
    4. Packer-г тодорхойлох аргууд
    5. Packer-аас задлах
    6. LordPE
    7. OllyDump
    8. Memory Map үүсгэх
    9. Автоматчилсан unpacking
  9. Rootkit
    1. User-mode rootkit
    2. Kernel-mode rootkit: Direct Kernel Object Manipulation
  10. Номзүй

Ерөнхий ойлголт

Анализын зорилго

Malware analysis-н гол зорилго нь ямарваа malware-н хийдэг үйл ажиллагааг ойлгож, түүнээс хэрхэн сэргийлж хамгаалах тухай мэдлэгтэй болох явдал юм. Ерөнхийдөө “Компьютер буюу сүлжээ нь malware-д ямар замаар, хэрхэн өртсөн бэ?”, “Энэхүү malware нь юу хийдэг вэ?” гэсэн хоёр асуултад хариулахыг оролддог.

Ямарваа malware-д дүн шинжилгээ хийхдээ тэр нь ямар хүчин чадалтай вэ, түүнийг сүлжээнд хэрхэн илрүүлэх вэ, мөн нөлөөллийг нь хэрхэн бууруулж, саармагжуулах вэ гэдгийг олж тогтоодог.

Malware-д дүн шинжилгээ хийж дууссаны дараа ирээдүйд сүлжээгээ хамгаалахын тулд malware-г илрүүлэгч signature зохиох боломжтой болно. Signature гэдэг нь malware анализын хамрах хүрээнд “тухайн malware нь энэхүү системд халдсан уу” гэсэн асуултад хариулдаг, илрүүлэгч шинж тэмдгүүдийн цуглуулга болдог. Signature-уудыг хоёр ерөнхий төрөлд хуваадаг.

Host-based signature буюу Индикатор – тус тусын компьютерууд дээрх хөнөөлт кодыг илрүүлэх зориулалттай. Malware-н үүсгэсэн, өөрчилсөн файл, эсвэл регистрт оруулсан өөрчлөлтүүдийг илрүүлдэг. Host-based signature-ууд нь системд гаргасан өөрчлөлтийг илүүд авч үздэг байхад антивирус програмууд нь өөрчлөлтийг биш, malware-н өөрийнх нь шинж чанарыг голлон авч үздэг. Иймээс бага зэргийн өөрчлөлттэй malware-г, эсвэл компьютераас аль хэдийнээ устгагдсан malware-г илрүүлэх магадлал өндөртэй байдаг.

Нөгөө төрөл болох network signature нь сүлжээгээр дамжин өнгөрөх өгөгдлийг хянаж хөнөөлтэй кодыг илрүүлдэг. Ийм signature-г бүтээхдээ malware analysis хэрэглэх шаардлагагүй байдаг ч дүн шинжилгээгээр боловсруулсан signature нь илүү найдвартай байдаг.

Signature-уудыгболовсруулсны дараа malware-н ажиллагааг олж тогтоох ёстой.

Malware analysis хийх аргууд

Malware analysis хийх гэж байхад malware-н exe файлаас өөр зүйл байдаггүй. Иймээс тухайн exe файл дээр тулгуурлаж л төрөл бүрийн хэрэгсэл, аргачлалыг ашиглан анализыг гүйцэтгэдэг.

Malware analysis хийх хоёр ерөнхий арга байдаг:

  • кодын (code) буюу статик (static) анализ
  • үйлдлийн (behavioral) буюу динамик (dynamic) анализ

Эдгээр хоёр аргачлалыг цааш нь энгийн (basic), ахисан (advanced) гэж хуваадаг.

Энгийн анализ

  • Статик: malware-н exe файлын инструкцуудыг тайлж уншихгүйгээр анализ хийх. Энэ аргыг хэрэглэсэн анализ нь хурдан байх ч төвөгтэй malware-д хангалтгүй байх ба бусад анализыг давхар ашиглах шаардлагатай байдаг.
  • Динамик: malware-г системд ажиллуулж тухайн орчинд ямар нөлөөлөл үзүүлж байгааг ажиглах үйл явц. Динамик анализыг хийхдээ аюулгүй лабортарийн орчныг бүтээх ёстой.

Ахисан анализ

  • Статик: malware-н exe файлыг disassembler ашиглан задалж, дотрохинстрикцуудыг тайлж уншиж, reverse engineering хийнэ. Үүнийг хийхийн тулд ассемблер код болон disassembly, код, Виндоусын үйлдлийн системийн харьцангуй өндөр мэдлэг шаардлагатай.
  • Динамик: debugger ашиглаад гүйцэтгэгдэж буй malware-н exe файлын дотоод төлөвтэй танилцана. Malware-д бүрэн шинжилгээ хийхийн тулд ахисан статик, динамик анализыг хослуулан хэрэглэх шаардлагатай байдаг.

Malware-г ангилах нь

  • Mass malware: Аль болох олон компьютер, системд халдаж байхаар бүтээгдсэн malware. Энэ нь олон газар түгээмэл тохиолддог бөгөөд targeted malware-г бодвол энгийн хийцтэй, илрүүлж хамгаалахад хялбар байдаг.
  • Targeted malware: Ямарваа байгууллага, этгээдэд зориулж хийгдсэн байх malware. Үүнийг илрүүлэхэд хэцүү, ердийн антивирус програмууд нь илрүүлж чадахгүй, илүү нарийн хийцтэй байдаг.

Malware-н илүү нарийн ангиллыгхавсралтын хэсэгт оруулж өгөв.

Лабораторийн орчин бүтээх

Виртуал машин хэрэглэх

Malware-д динамик анализ хийхдээ өөрийнхөө ажлын компьютер дээр биш, бусад бүх сүлжээ, компьютераас тусгаарлагдсан төхөөрөмж дээр хийх нь чухал байдаг.

Динамик анализыг Air-gapped network-д (бусад бүх сүлжээнээс тусгаарлагдсан) холбогдсон компьютер дээр хийдэг. Үүний нэг дутагдалтай тал нь Интернетийн холболт байхгүй тохиолдол Malware нь интернет дахь нөөцтэй холбогдож ажилладаг тул бүрэн ажиллагааг нь олж мэдэх хэцүү болно. Бодит төхөөрөмж дээр хийх өөр нэг дутагдалтай тал нь өмнөх (malware-гүй) төлөвт эргүүлж буцаах нь асуудал болдог.

Эдгээр зүйлсийг авч үзэн динамик анализыг хамгийн хялбараар Виртуал машин ашиглаж гүйцэтгэнэ.

Програм: VMware Workstation (www.vmware.com)

Виртуал машины ажиллах зарчим

Виртуал машин нь хост дотроо програм байдлаар ажиллах бөгөөд Виртуал машин дотор ажиллах програм нь host үйлдлийн системээсээ тусгаарлагдсан байдаг. Виртуал програм гэдэгт ямар нэгэн malware байж болох бөгөөд энэ нь host-доо халдахаас тусгаарласан байна.

Зарим malware нь өөрийнхөө ажиллаж байгаа үйлдлийн систем нь Виртуал машинд ажиллаж байгааг мэдэж, өөрөөр ажиллах тохиолдол байдаг ч энэ нь харьцангуй ховор тохиолдол юм.

Зураг 1. Виртуаль машины ажиллагаа

Шаардлагатай болох VMware функц

  • Host Networking: Олон Виртуал машин ашиглаж анализ хийхдээ эдгээрийг бүх сүлжээнээс салангид Виртуал сүлжээнд холбож хэрэглэж болно. Энэхүү сүлжээний нэг онцлог нь бүх компьютер hub-д зэрэг холбогдсон мэт байдаг. Иймээс аль чкомпьютераас ирсэн мэдээлэл нь бусад компьютерүүд дээр харагдах ба packet sniffing хийхэд маш хялбар болдог.
  • Bridged Networking: Виртуал машинаа интернетэд холбох хэрэгтэй үед ашиглана. Ингэхдээ malware-н ажиллагаатай нилээд танилцаж, интернетэд холбогдсон хостуудад халдах боломжгүй гэх мэт зүйлсийг тогтоосны дараа гүйцэтгэх хэрэгтэй.
  • Snapshot: Энэ нь Виртуал машины төлөвийг хадгалах зориулалттай бөгөөд эргүүлж буцаах боломжийг олгодог. Олон snapshot хийж болдог тул анализыг хийж байгаа явцаа snapshot болгож хадгалаад, үйлдлийн системээ анх суулгасан байх үеийн snapshot рүүгээ шилжих гэх мэт зүйлийг хийж болно.
  • Record/Replay: Виртуал машинынхаа хийсэн бүх үйлдлийг хадгалж, дараа нь харах боломжтой.

Туршилтийн хэсэгт хэрэглэх сүлжээний бүтэц

Тус ангийн ажлын туршилтуудыг VMware дээр үүсгэсэн хоёр Виртуал машин дээр голлон гүйцэтгэв. Эдгээр нь Windows XP SP2 болон Линукс үйлдлийн системүүдтэй. Эдгээр нь Host-only сүлжээнд бие биетэйгээ холбогдож ажиллана. Ерөнхийдөө Windows XP машин дээр malware-г ажиллуулж, анализыг хийх бөгөөд тухайн malware нь сүлжээтэй холбогдох гэж оролдвол бүх мэдээлэл нь Линукс машин руугаа явах зарчимтай ажиллана.

Зураг 2. Лабораторийн сүлжээний бүтэц

Windows XP машинд анализ хийдэг програмуудыг суулгаж, path variable-уудыг тохируулж, “Clean” гэсэн нэртэй Snapshot үүсгэж өгөв.

Зураг 3. Windows XP-гийн screenshot

REMnux

ТуршилтадхэрэглэсэнЛинукс машин нь REMnux гэсэн distribution-г ашиглана. REMnux буюу R everse E ngineering M alware Linux нь malware анализ-д зориулсан хэрэгслүүдийг суурилуулж өгсөн үйлдлийн систем. Үбүнтү дээр суурилсан бөгөөд бүтээгч нь SANS инстутутын багш Lenny Zeltser.

Програм: Windows XP, REMNux (zeltser.com/remnux)

Энгийн статик анализ

Статик анализ гэдэг нь malware-гзадалж, код болон бүтцийг нь харах зарчмаар анализ хийх үйл ажиллагаа юм. Ийм анализыг хийхдээ malware-г ажиллуулахгүй.

Antivirus Scanning

Malware-д анализ хийхдээ антивирус програмаар үүнийг уншуулах нь зүйтэй. Энэ нь эхний алхам болдог. Antivirus-үүд нь malware-г илрүүлэхдээ голчлон file signature (өмнө нь илрүүлж, бүртгэгдсэн malware), мөн heuristics (pattern matching) гэсэн хоёр аргыг ашигладаг. File signature-н хувьд өмнө нь илрүүлж, тухайн signature-г бүртгэж авсан malware-гл таних боломжтой бөгөөд дутагдалтай тал нь цоо шинэ malware-г илрүүлж чаддаггүй. Иймээс zero-day attack гарахад илрүүлэх боломж байхгүй. Нөгөө сул тал нь malware-н зохиогчид кодоо бага зэргээр өөрчлөхөд л signature-аа өөрчилж, нууцлах боломжтой байдаг. Heuristics нь харин pattern matching анализ гүйцэтгэх тул өмнө нь илрүүлж чадаагүй malware-г таних боломж илүү өндөртэй. Antivirus-ний програмууд нь бүгд өөр өөр signature, heuristics-н аргыг хэрэглэх тул олон програмаар зэрэг уншуулах нь үр дүнтэй байдаг бөгөөд эдгээрийг хийх интернет хэрэгслүүд байдаг.

Сайтууд:

  • VirusTotal (www.virustotal.com)
  • Jotti's Malware Scan (virusscan.jotti.org)
  • Filterbit (www.filterbit.com)
  • VirSCAN (www.virscan.org)

Hashing

Malware-ийг hashing program-аар уншуулж, үүнийг таних тэмдэг болох hash-ийг гаргаж авдаг. Hash нь ердийн текст хэлбэртэй байх тул тухайн malware-ийг хайх, бусад хүмүүстэй хуваалцах хялбар арга болдог. MD5, SHA-1 алгоритмүүдийг хамгийн түгээмэл ашигладаг. Hash-гинтернетээс хайхдаа дараах сайтуудыг хэрэглэдэг.

Програм: WinMD5 (www.winmd5.com)

Сайтууд:

  • Bit9 FileAdvisor (fileadvisor.bit9.com/Services/search.aspx)
  • Team Cymru Malware Hash Registry (www.team-cymru.org/Services/MHR/)
  • OffensiveComputing (www.offensivecomputing.net/)
  • ThreatExpert (www.threatexpert.com)
  • VirusTotal (www.virustotal.com)

String analysis

Exe-гзадалж дотор нь байгаа тэмдэгтийн цувааг харсанаар ямар ажиллагаатай байдгийг мэдэж авах боломжтой байдаг. Жишээлбэл exe дотор IP хаяг, домэйн нэр агуулсан тэмдэгтийн цуваа байвал тус програм нь тухайн хаягтай харьцаж ажилладагийг мэдэж болно. Ингэхдээ Windows SysInternals-н гаргасан “Strings” програмыг ашиглаж болно.

Програм: Strings (technet.microsoft.com/en-us/sysinternals/bb897439.aspx)

Linked Libraries, Functions

Програмын кодтой linked libraries-д анализ хийснээр ихээсэн мэдээллийг авч болно. Windows Exe-ууд нь Portable Exe file format-тай байдаг бөгөөд ийм төрлийн файлд хамгийн түрүүнд байх хэсэг нь PE header юм. Тус хэсэгт кодны талаарх мэдээлэл, програмын төрөл, хэрэгцээт сангийн функцууд, зайн шаардлагууд бичигдсэн байдаг.

Эдгээрээс хамгийн чухал зүйлсийн нэг нь импортлох функцууд юм. Кодны санг өөрийн програмд оруулж өгөхдөө linking ашиглана. Static (хэрэгтэй файлыг exe-д хуулах), Runtime (програм ажиллахдаа хэрэгтэй үедээ л сангуудтай харилцана), Dynamic Linking (програм анх ачааллахдаа тухайн үйлдлийн системд суусан сангуудыг хайна) гэж байдгаас malware нь dynamic linking байх нь хамгийн түгээмэл байдаг.

Үүнээс гадна PE file header-д exe-н imported function, exported function-уудын тухай мэдээллийг агуулсан байдаг. Imported Function-н хувьд Windows-н өөрийнх нь функцууд байх бол ажиллагааг нь олж мэдэх маш хялбар болно. Exported function-ууд нь DLL файлуудад хамгийн түгээмэл бөгөөд malware-н хувьд ажиллагааг нь нуухын тулд ойлгомжгүй нэр өгөх гэх мэт аргачлалыг хэрэглэх тул үүнээс хэрэгтэй мэдээлэл олж авах боломж бага байдаг.

Програм: Dependency Walker (www.dependencywalker.com)

Packing & Obfuscation

Malware-ийгзадалж, анализ хийхэд илүү төвөгтэй болгохын тулд зохиогчид нь packing, obfuscation хэрэглэдэг. Obfuscation гэдэг нь програмын цаад ажиллагааг нууцлах үйлдэл. Packing гэдэг нь хөнөөлтэй програмыг шахаж, шууд задалж анализ хийх боломжгүй болгох үйлдэл юм. Ийнхүү нууцлагдсан програмуудыг таних нэг шинж нь шууд задлахад гарч ирэх тэмдэгтийн цуваа цөөн тоотой байх явдал юм. Энэ нь malware-н бас нэгэн таних тэмдэг болж өгдөг.

Packed програмууд нь wrapper program, мөн анхны exe-аас бүтдэг. Шууд задалж унших гэж оролдвол энэхүү wrapper програмийгл харж болдог. Иймээс статик анализыг гүйцэтгэхийн тулд анхны програмыг гаргаж авах ёстой байдаг.

Програм: UPX (upx.sourceforge.net), PEiD (www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml)

String Obfuscation

Malware-д байгаа тэмдэгт мөрүүдийг хялбар аргаар нуухын тулд XOR, ROR, ROL, ROT үйлдлүүдийг тухайн тэмдэгт мөрүүд дээр хийсэн байдаг. Эдгээрээс XOR-дах нь түгээмэл бөгөөд ийм байдлаар нуусан тэмдэгт мөрүүдийг олохдоо XORSearch програмыг хэрэглэнэ.

Програм: XORSearch (http://blog.didierstevens.com/programs/xorsearch)

PE File Headers, Sections

PE File Header-т түгээмэл тохиолддог хэсгүүд:

  • .text – Ажиллах инструкцын хэсэг (код)
  • .rdata – Import, Export мэдээллийг агуулна (.idata, .edata гэж хуваагдаж болно)
  • .data – Програмын global data-г агуулна
  • .rsrc – exe-н хэсэг биш ч түүний хэрэглэх зүйлс байрлана (icon, зураг, меню, тэмдэгт цуваа г.м.).

Ерөнхийдөө PE файлын толгой хэсгээс import/export-ууд, компайлдсан огноо, файлын хэсгүүдийн нэр, эзлэх зай (disk, memory-д), subsystem (команд, эсвэл GUI програм эсэх), resource-н тухай мэдээллийг авч болдог.

Програм: PEView (wjradburn.com/software/), Resource Hacker (www.angusj.com/resourcehacker/)

Энгийн динамик анализ

Динамик анализ гэдэг нь malware-г ажиллуулах зарчмаар анализ хийх үйлдэл юм. Энэ нь статик анализыг гүйцэтгээд хангалтгүй үр дүнд хүрсэний дараа, хийж болох бүх зүйлийг хийсний дараа, эсвэл obfuscation-ий улмаас ер статик анализыг хийх боломжгүй болсоны дараа хийгдэг алхам юм.

Статик анализыг бодвол malware-н үйл ажиллагааг кодыг нь харж таах биш, бодитоор мэдэж авах боломжтой. Хэдийгээр ийм боловч динамик анализ нь өөрийн сүлжээ, системийг аюулд учруулж болзошгүй учир статик анализыг гүйцэтгэсний дараа л хийх ёстой байдаг. Нэмэлт аргумент авч ажилладаг malware-н хувьд ямар аргумент ашигладагийг мэдэхгүй тохиолдолд бүрэн үйл ажиллагааг нь мэдэх боломжгүй байх тал бас байдаг. Иймээс ахисан төвшинд динамик анализ хийхдээ статик анализ, динамик анализыг хослуулан хэрэглэдэг.

Sandboxing

Sandbox гэдэг нь аюулгүй орчинд програмыг ажиллуулах зориулалттай механизм юм. Sandbox хийдэг програмууд нь malware-ийгажилуулж, динамик анализыг автоматчилсан байдлаар явуулна. Гэвч ийм програмууд нь маш үнэтэй байдаг тул ердийн үнэгүй хэрэгслүүдийг ашиглан гар аргаар анализ хийхийг ихэнх тохиолдолд илүү ашигтай гэж үздэг. Үүнээс гадна sandbox хийдэг програмууд нь malware-г аргументгүйгээр ажиллуулдаг, цаг хугацаанаас хамаарч ажилладаг malware-н бүрэн үйл ажиллагааг хянаж чаддаггүй гэх мэт дутагдалтай талуудтай. Товчоор хэлвэл маш олон хүчин зүйлээс хамаарч ажилладаг malware-нанализыг автоматчилсан хэрэгслээр гүйцэтгэхэд маш их мэдээллийг авахгүй байх тохиолдол байдаг.

Програм: Norman Sandbox, GFI Sandbox

Malware-г ажиллуулах

exe файлтай malware-г ажиллуулах бол ямар ч асуудалгүй (дээр нь хоёр дарахад л хангалттай) байдаг. Харин dll-г автоматаар ажиллуулах нь exe шиг хялбар биш. Dll файлыг ажиллуулахын тулд rundll32.exe –г ашигладаг.

C:\\>rundll32.exe _DLLname_, _Export arguments_

Үүнд, export argument-уудыг PE File Header дахь export table-с авна. Энэ нь ихэнх тохиолдолд Install гэсэн утгатай байна. Хэрэв export function нь нэр байхгүй, зөвхөн дугаараар тодорхойлогддог бол #дугаар гэсэн аргументийг оруулна. Ингэж rundll32.exe –г ашиглахаас гадна dll файлынхаа толгой хэсгийг өөрчилж автоматаар ажилладаг болгохоор өөрчлөх боломж байдаг.

dll файлын зарим malware-г service болгож ажиллуулах шаардлагатай байдаг.

C:\\>rundll32 ipr32x.dll,InstallService ServiceName

C:\\>net start ServiceName

Process Monitor

Process monitor (товчоор procmon) нь FileMon, RegMon гэсэн хоёр програмыг нэгтгэсэн байдалтай бөгөөд компьютерийн регистр, файл систем, сүлжээ, процесс, thread-н үйл ажиллагааг хянах зориулалттай програм.

Procmon-г ажиллуулж эхлэнгүүт компьютер дээр явагдах бүхий л system call-г бүртгэж авдаг (алдах тохиолдол байж болно). RAM руу бүртгэж авдаг тул компьютерт хэт их ачаалал үзүүлэх магадлалтай. Иймд malware ажиллах хугацаанд л procmon-г ажиллуулж тухайн анализаа дууссан гэж үзвэл даруй унтрааж байх ёстой.

Дэлгэцэнд маш их мэдээлэл гарч байдаг тул procmon нь дотроо хэд хэдэн шүүлтүүрийг агуулсан байдаг. Үүнд:

  • Регистр: malware нь регистрт ямар зүйл нэмж өөрчилснийг ажиглах
  • Файл систем: malware-н үүсгэсэн, хэрэглэх файлыг харах
  • Процессийн үйл ажиллагаа: процессүүдийгхарсанаар malware нь өөрөөсөө гадна шинэ процесс үүсгэсэн эсэхийг шалгаж болно.
  • Сүлжээ: сүлжээнд ямар портыг чагнаж байгааг ажиглах

Програм: Process Monitor (technet.microsoft.com/en-us/sysinternals/bb896645.aspx)

Process Explorer

Process explorer-г ашиглан систем дээр ажиллаж буй бүр процессийг харах боломжтой. Энэ нь windows-н Task Manager-н “Processes” табийн сайжруулсан хэлбэр гэж үзэж болно.

Дараах мэдээллийг багана бүр дээр харуулдаг:

  • Process: процессийн нэр
  • PID: процессийн ID
  • CPU: CPU-гийн хэрэглээ
  • Description: тайлбар
  • Company Name: тухайн процессийг зохиосон компани (Microsoft, VMware гэх мэт)

Процесс бүрийн хувьд түүний хэрэглэдэг thread-үүд, хэрэглэж буй порт, дотрох тэмдэгт цуваа, дискэн дээрх байршил зэрэг мэдээллийг харах боломжтой. Үүнээс гадна тоон гарын үсэг хэрэглэх замаар тухайн процесс нь жинхэнээсээ Microsoft-н гаргасан програм мөн эсэхийг шалгах боломжтой. Энэхүү хэрэгсэл нь RAM дээр ачааллагдсанпроцессийг биш, диск дээр байгаа процессийг шалгадаг тул process replacement (системийн өөрийнх нь процессийг ажиллуулаад эзэлж байсан санах ойн байршлыг malware-аар солих) ашигласан тохиолдолд үр ашиг муутай. Process replacement ашигласан эсэхийг шалгахдаа диск, санах ой дахь процессүүдийн тэмдэгтийн цуваануудыг харьцуулж үзэж болно. Энэ хоёр нь бие биенээсээ ихэд ялгарч байвал process replacement явагдсан байх магадлалтай.

Process Explorer-ийг ашиглан Dependency Walker (depends.exe)-г ажиллуулж болно. Тус процессийн (гэхдээ диск дахь хувилбарийн нь) хэрэглэдэг бүх dependency-нүүдийг жагсааж харуулна. Процессийг анх ачааллахад тухайн dll-г хэрэглэсэн эсэхийг шалгахын тулд dependency walker-н гаргаж ирэх dll-н жагсаалт, Process Explorer-н гаргаж ирэх жагсаалт хоёрыг харьцуулж болно.

Process Explorer-ийг ашиглан malware агуулсан Word, PDF документид анализ хийх боломжтой. Документаа нээгээд араас нь процессүүдүүсч байвал үүнийг Process Explorer-аас харж, тухайн malware-н диск дахь байршлыг олж тогтоох боломжт­ой.

Програм: Process Explorer (technet.microsoft.com/en-us/sysinternals/bb896653.aspx), Dependency Walker

Autoruns

Autoruns нь дээрх хоёрын адилаар мөн л SysInternals-с гаргасан програм бөгөөд тухайн систем асахад ямар програм, Windows үйлчилгээ, Internet Explorer-н Browser Helper Object (BHO) автоматаар ажиллаж эхлэдэгийг харуулдаг. Анализыг хялбарчлахын үүднээс Microsoft-н тоон гарын үсэгтэй үйлчилгээнүүдийг нууж болдог.

Програм: Autoruns (http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx)

Regshot

Malware системд ямар үйлдэл хийснийг харахын тулд системд ямар өөрчлөлт хийснийг харсанаар олж тогтоож болно. Өөрөөр хэлбэл malware ажиллахаас өмнөх системийн байдал, ажилласны дараах системийн байдал хоёрыг харьцуулна. Regshot нь яг ийм үйлдлийг хийдэг бөгөөд malware-аа ажиллуулахаас өмнө нэг snapshot, дараа нь нэг snapshot хийж хоёр тохиолдлын регистрүүд хоорондын зөрүүг гаргадаг.

Програм: Regshot (sourceforge.net/projects/regshot/)

What's Running?

Тус програм нь систем дээр ажиллаж буй процесс, үйлчилгээ, модуль, драйвер, сүлжээний холболт (UDP, TCP), систем асахад ажилладаг үйлчилгээнүүдийг харуулдаг. Мөн Regshot-н адилаар snapshot хийж, ялгааг нь харах боломжийг олгодог. Regshot-г бодвол регистрт гарсан ялгаануудыг тайлбарлаж өгч, системд ямар нөлөө үзүүлдэгийг харуулдагтай холбоотой.

Програм: What's Running? (http://www.whatsrunning.net/)

Process Hacker

Process Explorer-тай төстэй бөгөөд дотроо өөрийн гэсэн kernel driver-тай байдаг учраас зогсооход төвөгтэй процессуудыг ч зогсоож байдаг. Системд ажиллаж буй бүх процессууд сүлжээнд хэрхэн нөлөөлж буйг харж, санах ойг нь харж, өөрчлөх боломжийг олгодог.

Програм: Process Hacker (http://processhacker.sourceforge.net/)

DNS Spoofing

Маш олон тохиолдолд malware нь интернетэд холбогдож, заавраа авдаг. Malware-г ажиллуулах явцад ямар сүлжээнд хандаж байгааг мэдэх, ингэх явцдаа интернетрүү гаргасан траффикийг хянах нь маш их мэдээллийг олгоно.

ApateDNS гэх мэтийн DNS spoofing програм ашиглаж malware-н хандах гэсэн домэйн нэрэнд худал IP хаяг оноож траффикийг өөр тийш чиглүүлж (энэхүү ажлын туршилтын хувьд Линуксруу) болно. Үүнийг хийх хамгийн хялбар арга нь malware-тайкомпьютерийн hosts файлыг өөрчлөх явдал болно.

Мөн NetCat ашиглаж орж буй, гарч буй траффикийн аль алиныг хянах боломжтой.

Програм: ApateDNS (www.mandiant.com/resources/download/research-tool-mandiant-apatedns), NetCat (netcat.sourceforge.net/)

IP хаяг хэрэглэдэг malware-тай тэмцэх

IP хаяг нь байнга өөрчлөгдөж байх магадлалтай байдаг тул ихэнх malware нь hostname хэрэглэдэг. Харин malware-н зарим төрлүүд, жишээлбэл Сүлжээний worm нь өөр өөрийгөө хуулж тавьдаг бөгөөд тжхайн нэг хаягтай хостод халдахгүй, тухайн сүлжээний хостуудыг хянаж өөрийгөө тараах, эсвэл random-оор IP хаяг сонгож халддаг.

Honeyd нь угтаа honeypot бөгөөд олон виртуальхостыг сүлжээнд симуляцлах боломжтой (65536 хост) бөгөөд эдгээрийг ашиглан маш олон тооны сервертэй төстэй үйл ажиллагаатай болгож байдаг. Маш олон хиймэл сервер ашигласнаар халдагчид нь жинхэнэ серверийг олохын тулд илүү их судалгаа хийх болж, honeypot-д өртдөг. Зөвшөөрсөн сүлжээний траффик нь зөвхөн бодит серверүүдэд л хандах ёстой бөгөөд халдлагын чанартай траффик л эдгээр виртуальхостуудруу ханддаг байна. Malware-тай ажиллах хүрээнд honeypot байдлаар биш, сүлжээг симуляцлах зорилгоор хэрэглэнэ.

Үүнийг farpd-тай хамт хэрэглэснээр ARP request-үүдийн хариуг хуурамчаар илгээж, өөр рүүгээ траффикийг чиглүүлнэ. Honeyd-гийнхаа config file-аа өөрчилснөөр ямар траффикт хандах, хандаад ямар үйлдэл хийхийг зааж өгнө. Жишээлбэл tcp, udp, icmp сүлжээний траффикт default-р хандахгүй мөртлөө 80-аар ирсэн траффикт хандаж, “/usr/share/honeyd/scripts.web.sh”-гаар (вэб серверийг симуляцилах скрипт) хариу илгээх config file-г оруулав. 6666 портын хувьд бүх траффикийг өөр рүүгээ чиглүүлнэ. IRC ажиллаж байгаа тул тусдаа скрипт хэрэггүй гэж үзэж байна.

create default

set default default tcp action block

set default default udp action block

set default default icmp action block

add default tcp port 80 "sh /usr/share/honeyd/scripts/web.sh"

add default tcp port 6666 proxy 127.0.0.1:6666

Програм: Honeyd Virtual Honeypot (www.honeyd.org/‎), Fake ARP Daemon/farpd

Packet sniffing

Wireshark програмыг ашиглан тухайн сүлжээгээр дамжиж буй мэдээллийг авч анализ хийх боломжтой. Malware нь ямар сайт руу хандах гэж байгаа, ямар порт хэрэглэх гэж байгаа гээд сүлжээгээр дамжих бүхий л мэдээллийг хянах боломжийг олгодог.

Програм: Wireshark (wireshark.org

INetSim

INetSim нь Линукс орчинд ажилладаг, Интернет үйлчилгээнүүдийг симуляцлах боломжийг олгодог. HTTP/HTTPS серверийг симуляцлахдаахүсэлтэндд ирсэн бараг бүх файлыг хариуд нь явуулах боломжтой байдаг. Мөн оролтонд ирсэн бүх хүсэлт, холболтыг лог файлд бичдэг. Malware analysis-д хэрэглэгдэх зориулалттай байдаг тул аль чпортонд ирсэн мэдээллийг бүртгэж авдаг “Dummy service”-г өөртөө агуулдаг.

Програм: INetSim (inetsim.org)

Жишээ динамик ба статик анализ

tnnbtib.exe. Ямар ч malware-д анализ хийхийн өмнө тус malware-г өөр ямар нэгэн газар илрүүлсн эсэхийг шалгана. Ингэхдээ hash-г нь гаргаж авч, интернетээс хайлт хийв.

Зураг 4. tnnbtib-н md5 hash

Хялбар болгох үүднээс md5sum.exe –г md5sum гэсэн нэртэй path variable-тай болгож өгөв. Үүнийг ThreatExpert.com болон OffensiveComputing.net: -аас хайхад malware-ийн тухай мэдээлэл гарч ирэв:

Зураг 5. tnnbtib-г ThreatExpert-__с хайхад гарч ирэх илэрц

Зураг 6. tnnbtib-г OffensiveComputing-__с хайхад гарч ирэх илэрц

Эдгээрийг харвал Slackbot нэртэй Trojan/backdoor гэж илрүүлж байна.

Динамик анализ

Эхний алхам болгож Process Monitor, Process Explorer, Regshot, CaptureBAT програмуудыг хэрэглэнэ. Regshot ашиглан Malware ажиллахын өмнөх регистртийн байдал, malware ажилласны дараах байдлыг харьцуулна. Иймээс хамгийн түрүүнд Regshot-г нээж, snapshot авна.

Зураг 7. Regshot ашиглан регистрт хийсэн өөрчлөлтийг харьцуулах

Malware-г ажиллуулж дуусаад дахин shot хийгээд харьцуулбал:

Зураг 8. Regshot-н үр дүн

гэсэн файл үүссэн байх ба үүнээс tnnbtib.exe гэсэн үгийг хайвал:

гэсэн регистрт утга нэмсэнийг харж болж байна.

CaptureBAT: Энэ нь ерөнхийдөө Regshot-той төстэй програм бөгөөд noise багатай гэж үздэг. Гаралтыг файлд чиглүүлэхийн тулд capturebat.exe > файлын_нэр гэж зааж өгөх хэрэгтэй.

Capture.txt файлыг харвал:

Зураг 9. CaptureBAT-н илрүүлсэн өөрчлөлт. Голлож авч үзэх хэсгийг шараад тодруулав.

Үүнээс хамгийн гол харах зүйлс нь C:\WINDOWS-дөөртэйгээ ижил нэртэй файл үүсгэсэн , мөн регистрт утга нэмж өөрийгөө компьютер асахад шууд ажиллах байдлаар тохируулсан явдал байна.

Process Monitor: Malware ажиллаж эхлээд ямар дараалллар ямар үйлдлүүдийг хийсэн бэ гэдгийг шалгана. Тус програм нь их хүчин чадал шаарддаг тул malware ажиллуулахын өмнөхөн эхлүүлж, malware-нпроцессийг цуцлангуут зогсооно. Эхлүүлэх, зогсоохыг Ctrl+E, бүх логийг цэвэрлэхийн тулд Ctrl+X ашиглана. Үүссэн логуудыг хянахдаа зөвхөн “tnnbtib” үгийг агуулсан процессүүдийг харуул гэх мэтийн шүүлтүүр тавьбал илүү хялбар болно.

Үүн дээр мөн дээрх регистрт бичсэн утга (“RegCreateKey”), шинээр үүсгэсэн файлуудыг харж болж байна:

Зураг 10. ProcessMonitor-т шинээр файл үүсгэж буй байдал

Зураг 11. ProcessMonitor-т регистр сольж буй байдал

Process Explorer ашиглан Тухайн malware-нпроцесс ажиллаж байгаа эсэх, мөн сүлжээнд ямар портоор хандаж буйг харах зориулалттай.

Зураг 12. ProcessExplorer-н дэлгэц

Үүний дараа шинээр үүссэн файлыг шинжлэнэ. C:\WINDOWS-д үүссэн tnnbtib.exe файл нь ямар файл болохыг мэдэхийн тулд эхлээд анхны tnntib.exe-тэй ижилхэн үгүйг харж болно. Ингэхдээ hash-уудыг харьцуулж болно.

Зураг 13. Hash ашиглан файлууд ижил гэдгийг харах

Hash-ууд нь яг ижилхэн байгаа тул ижилхэн файл гэж ойлгож болно.

Одоог хүртэл хийсэн анализын дүнд бидний tnnbtib.exe файл нь ажиллангуутаа өөрийгөө Startup-д ажиллуулдаг болгож, C:\WINDOWS директорид өөрийгөө хуулдаг гэж мэдэх болсон.

Сүлжээний орчинд динамик анализ хийх

REMnux дээрээ wireshark ашиглан malware-н гаргаж буй пакетуудыг хянана.

Зураг 14. Wireshark-аар сүлжээний орчинд илгээх траффикийг харах

Үүнээс харвал XP дээрх malware нь sb.webhop.org, irc.slim.org.au, malwarecourse.sans.org гэсэн домэйнүүдийн IP хаягийг DNS-с асуух гэж оролдож байна. Тус malware нь сургалтын зориулалттай тул хүссэн нэг хаягийг бага зэрэг өөрчлөгдсөн нь харж байна. Цаашаагаа динамик анализ хийхийн тулд домэйнд харгалзах IP хаяг өгч, үйлдлийг нь харна. Ингэх хамгийн хялбар арга нь XP-гийнхээ host файлыг өөрчлөх явдал. Жич: гурван домэйнийг нэгэн зэрэг resolve хийх боломжтой болговол ажиглахад төвөгтэй, иймд тус тусад нь гүйцэтгэнэ.

Зураг 15. Hosts файлыг өөрчлөх

Одоо харвал 6666 руу TCP холболт үүсгэх гэж байгааг ажиглаж болно:

Зураг 16. IRC руу холбогдох гэж буй байдал

6660-6669 гэсэн registered port-ууд нь бүгд IRC-д хамаарна. Одоо IRC серверээ Линукс дээрээ ажиллуулж,

Зураг 17. IRCd__-г асаах

Зураг 18. IRC-тайгаа холбогдож malware-тай харьцах

Wireshark-аас TCP Stream-ийг нь ажиглавал:

Зураг 19. Malware-с irc руу илгээж буй команд

“kscamle” гэсэн NICK-тайгаар, #malware гэсэн өрөө рүү IRC-д холбогдож байна.Одоо IRC серверээ Линукс дээрээ ажиллуулж, дээрх өрөө рүү орж (join #malware гэж бичнэ) чатлаж үзэв:

Зураг 20. Malware-тай харьцах нь

sb.webhop.org-** г ** судлах

Wireshark-аар ажиглавал 80 буюу HTTP руу хандах гэж байна:

Зураг 21. Malware нь 80 руу хандаж буй байдал

Одоо netcat ашиглаж вэб серверийг симуляцлаж болно

sudo nc –p 80 –l –n

буюу 80-р портыг нээж өгч “l” буюу listening горимд шилжүүлж, “n”-ээр resolve хийхгүй гэж зааж өгнө.

Зураг 22. Malware нь хуурамч header илгээж буй байдал

Үүнийг харвал “Windows 98” компьютераас зар дээр дарсан гэж ойлгож болох GET request ирж байна. Хуурамч Header үүсгэж байна.

irc.slim.org.au-** г ** харах

Үүн дээр анализ хийхэд мөн адил IRC-г хүлээдэг ба нэрийг нь чат дээр бичихэд “yessss?” гэж гарч ирдэг байв:

Статик анализ

Malware дахь executable-н тэмдэгт цуваануудыг strings програм ашиглан харахад UPX packer ашигласан байхыг олж мэдэв. Иймээс уншигдахаар мөрүүд бараг байхгүй байв.

Зураг 24. Obfuscated malware-н тэмдэгт цувааг харах

UPX нь хамгийн түгээмэл хэрэглэгддэг packer програм бөгөөд анализ хийж байгаа хүнд давуу тал нь задлахад маш хялбар байдагт оршино (хэтэрхий жижигхэн файлыг задлахгүй байх тал гэхдээ байдаг). Задлахад upx –d задлах_файл

Зураг 25. UPX-р pack-лагдсан файлыг задлах

Ингэснээр файлыг задалж, анхны файл дээрээс нь бичиж байна. md5sum -р hash-г нь харвал өөрчлөгдсөн байна:

Зураг 26. Задласны дараа hash өөрчлөгдсөн байх байдал

Зураг 27. BinText-ээр тэмдэгт цуваануудыг харах

Харвал командын хэлбэртэй хэд хэдэн цуваа байна. Үүнийг IRC-д туршиж үзье.

Зураг 28. IRC ашиглан malware-д команд илгээж үзэх нь

Зарим команд ажиллаж байгаа ч, зарим нь ямар ч хариу өгөхгүй байна. !@login гэсэн команд байгааг харвал ямарваа байдлаар нууц үг нэхдэг байх боломжтой.

IDA-г хэрэглэх

Зураг 29. IDA Pro- г_ _ашиглан tnnbtib.exe- г нээж , !@login-__г хэрэглэсэн хэсгийг харах

Үүнээс харвал strcmp буюу харьцуулах үйлдлийг хоёр удаа дуудаж ажиллуулжээ. Эхнийх нь !@login гэдгийг өөр нэг тэмдэгт мөртэй харьцуулсан байна, өөрөөр хэлбэл оруулсан команд нь зөв эсэхийг шалгажээ. Хоёр дахь харьцуулалт нь харин үлмэдэгдэх хоёр тэмдэгт цувааг харьцуулсан байна. Дараа нь “pass accepted” гэсэн мөрийг хэвлэж байгааг харвал энэ нь нууц үгний харьцуулалтыг шалгаж байгаа мэт харагдаж байна. Жич: “comparison for password” гэсэн мөрийг би өөрөө оруулж тавьж өгсөн болно.

Одоо OllyDBG ашиглан програмыг ажиллуулахад энэхүү цэгт (4020B9) зогсдог байхаар “breakpoint” үүсгэнэ:

Зураг 30. OllyDBG-р breakpoint үүсгэх

Ингэснээр энэхүү програмыг ажиллуулж, IRC клиентээрээ malware-тай харьцахад 4020B9 гэсэн цэгт очоод гацаж, s1, s2 тэмдэгт цуваануудын аль алиныг харж, нууц үгийг харах боломжтой болно.

Зураг 31. Breakpoint-д хүрэх зорилгоор login команд хэрэглэх

Зураг 32. Нууц үгийг debug хийх байдлаар олж мэдэх

Нууц үг нь dlka4Msd байна. Үүнийг ашиглаад одоо нэвтрэх боломжтой.

Зураг 33. Олж мэдсэн password-г туршиж үзэх нь

!@run notepad.exe командын ашиглаад халдаж буй компьютертаа notepad-ийгажилуулж болж байв.

!@remove командыг турших

Regshot ашиглан !remove-гажиллуулсаны дараа ямар зүйл тохиолдож буйг харав.

Зураг 34. remove командыг турших нь

Зураг 35. remove-г хэрэглэснээр ямар өөрчлөлт гарахыг харах

@remove-г ажиллуулахад процесс нь унтарч, regshot-г харвал регистрээс автоматаар ажилладаг утгыг устгаж өгсөн байна. Гэхдээ WINDOWS директори дотроос өөрийнхөө хуулбарыг устгаж өгөөгүй байна:

Зураг 36. tnnbtib нь бүрэн устаагүй байна

Executable-д patching хийх, түүний жишээ

Executable-уудын ажиллагааг өөрчлөхийн тулд ассемблер кодод нь өөрчлөлт оруулж, patching хийдэг. Patching хийж анализыг хялбарчлах үүднээс authentication-г үгүй болгох, self-defending malware-н өөрийгөө хамгаалдаг тэр функцуудыг disable-даж болдог.

Жишээ болгож, tnnbtib.exe-гийн authentication-г байхгүй болгов. Өөрөөр хэлбэл !@login командыг хэрэглэхэд ямар ч нууц үгийг хэрэглэдэг болгоё.

!@login-г хэрэгжүүлдэг програмын хэсгийг харвал програмын кодыг харвал strcmp-ийн үр дүнгээс хамаараад JMP хийдэг мөр байна. Нууц үг буруу байвал энэхүү мөр нь идэвхжиж, өөр хэсэг рүү очиж, нэвтрэх боломжгүй байна. Тус мөрийг устгахад ямар ч нууц үгийг зөвшөөрдөг болно.

Зураг 37. Устгах хэрэгтэй password-г шалгадаг хэсэг

OllyDBG ашиглан тус мөрийг NOP буюу No Operation үйлдлээр солино (Space дарж). Ингэхдээ C:\WINDOWS дахь хувилбарт patch хийх шаардлагатай.

Зураг 38. JNZ-г NOP-оор солих

Өөрчилсний дараа Debug->Run командаар ажиллуулав.

Зураг 39. NOP-оор сольсон байдал

Ингэснээр дурын нууц үгийг зөвшөөрч байна (“mongol” гэж өгөв)

Зураг 40. Дурын нууц үгийг зөвшөөрч байна

Үүнийг бүрмөсөн хадгалахын тулд баруун товчлуур дээр дарж, “Copy to Executable”, “All modifications”-ийг сонгоно.

Ийнхүү анхны (нэр нь tnnbtib.exe) болон patch хийсэн файлуудыг (tnnbtibpatched.exe) нарыг Виндоусын fc.exe ашиглан харьцуулахад ялгаа нь гарч ирж байна:

Зураг 41. fc командаар patch хийсэн хийгээгүй файлыг харьцуулах

“90” нь NOP-ийн opcode юм.

Өөр өөрийгөө хамгаалагч malware

Өөр өөрийгөө хамгаалагч malware буюу Self-defending malware нь өөрт анализ хийгдэж буйг мэдэрч, ажиллагаагаа өөрчилж байдаг malware-г хэлдэг. Эдгээр нь VMWare-нвиртуалмашиныг дотор ажиллаж буй, OllyDbg-аар задлагдаж буй эсэхийг мэдэрч, ажиллахгүй байх, ердийн байдлаас өөрөөр ажиллах гэх мэт үйлдэл хийдэг.

VMWare-г таних

VMWare-нвиртуал машин дотор ажиллаж буйгаа танихын тулд VMWare-н хэрэглэдэг виртуал төхөөрөмж, MAC хаяг зэргийг хэрэглэнэ. Vmchk гэсэн ютилит бас байдаг бөгөөд энэ нь зөвхөн VMWare-д байдаг оролт гаралтын портыг хайснаар хэрэглэж таньдаг.

Эдгээрээс зайлсхийхийн тулд бодит машин хэрэглэх, эсвэл vmx файлаа бага зэрэг өөрчилж болдог. Ингэхэд виртуал машины ажиллагаа маш удаан болж, бүтээмж багасдаг талтай.

Өөрчлөх vmx файлын хэсэг:

isolation.tools.getPtrLocation.disable = "TRUE"

isolation.tools.setPtrLocation.disable = "TRUE"

isolation.tools.setVersion.disable = "TRUE"

isolation.tools.getVersion.disable = "TRUE"

monitor\_control.disable\_directexec = "TRUE"

monitor\_control.disable\_chksimd = "TRUE"

monitor\_control.disable\_ntreloc = "TRUE"

monitor\_control.disable\_selfmod = "TRUE"

monitor\_control.disable\_reloc = "TRUE"

monitor\_control.disable\_btinout = "TRUE"

monitor\_control.disable\_btmemspace = "TRUE"

monitor\_control.disable\_btpriv = "TRUE"

monitor\_control.disable\_btseg = "TRUE"

Гэхдээ өнөө үед маш олон байгууллага нь бүгд виртуал машинуудтай ажиллаж байх болсон тул VMWare болон бусад виртуал машинаас өөрийгөө хамгаалах malware-н тоо багасна гэж үзэж байна.

Анализаас хамгаалах

Анализаас хамгаалах хамгийн түгээмэл арга нь packer хэрэглэж executable-н файлын бүтцийг унших боломжгүй болгож байх явдал юм. Ийм үйлдлийг даван гарахын тулд packer-г тодорхойлж, анхны executable-гзадалж өгөх хэрэгтэй.

Packed програм нь анхны програмыг задалж, санах ойнд шууд ачаалладаг. Ихэнх тохиолдолд шахалт ашигладаг тул packer програм нь анхныхаасаа жижиг хэмжээтэй болсон байдаг ч зарим packer-ууд нь malware analysis-аас сэргийлэх функц агуулах болсон тул анхны програмаасаа том байдаг.

UPX нь л шууд задалдаг функцийг өөртөө агуулсан байдаг, бусад packer-ууд ийм байдаггүй. Гэсэн ч гэлээ UPX-г өөрчилж буцаах боломжгүй болгосон тохиолдол байдаг.

TLS callback function

Thread Local Storage (TLS) Callback Function-ууд нь програмын эхлэх цэг буюу entry point-аасаа өмнө ажилладаг. Үүнийг үүсгэж өгөхдөө Microsoft-н зорилго нь тухайн хувьсагчийн утга нь өөр өөр thread-д өөр өөр утгатай байх.

Ийм функцийг агуулсан програмыг OllyDBG-д нээж үзэхэд entry point-д зогсохгүйгээр, шууд ажиллаж эхлээд төхөөрөмжид халдах боломжтой.

Үүнийг давж гарахын тулд програмын entry point-д биш, системийн entry point-д зогсож байхаар OllyDBG-г тохируулж өгсөн байна.

Ингэсний дараа TLS callback function-ий хаягийг тодорхойлж, үүн дээрээ breakpoint үүсгэж задалж эхэлдэг

Packer-г тодорхойлох аргууд

  • Тэмдэгт цувааг ашиглаж болно. Хэдийгээр анхны executable-н тэмдэгт цуваанууд уншигдахгүй ч packer-н нэмсэн зүйлс байж болно. Дээрхийг ашиглан section-ий нэрүүдээр нь таньж болно:
    • UPX: UPX0, UPX1, UPX2
    • NSP: NSP0, NSP1, NSP2
    • ASPack: ASPack, adata (adata хэсэгт нь шахагдсан код байрлана)

    Үүнээс гадна дараах packer-ууд нь тодорхой тэмдэгт мөрүүдийг нэмж өгсөн байдаг:

    • RAR: %sRARSFX%d, Software\WINRAR SFX
    • Ntkrnl – NTkrnl Secure Suite, Metamorphism Portable Executable (PE) Packer and Protector Library
    • PeCompact – CODE, PEC2, .rsrc, PECompact2
    • Themida – .rsrc, .idata, Themida, aPa2Wa, WD}W
  • UNIX-н File програмыг ашиглах. file нь файлын ерөнхий properties, зарим түгээмэл packer-г илрүүлж чаддаг
  • PEID ашиглах. Тус програм нь signature database, entropy check зэргийг ашиглан packer-н нэр, packer ашигласан эсэхийг илрүүлж байдаг.

Packer-аас задлах

Аль болохоор packer-ийн өөрийнх нь буцаах функцийг хэрэглэх нь зүйтэй байдаг. Ингэх боломжгүй байвал санах ойд ачаалсан байгаа задалсан хувилбарыг ашигладаг. Өөр аргууд нь автоматаар задалдаг хэрэгсэл, debugger ашиглах явдал (ажиллаж байхад нь).

LordPE

Энэ нь үндсэн санах ойд ачаалсан буюу төхөөрөмж дээр ажиллаж буй програмыг гаргаж авч, хард дискэнд хуулдаг. Өмнөх tnnbtib malware-г UPX-ээр задлаагүй байхад нь LordPE ашиглан dump хийж, тэмдэгт цуваануудыг харж болно.

Өөр хэрэгсэл: PMDump (ntsecurity.nu/toolbox/pmdump)

Тус програмын нэг дутагдалтай тал нь PE header-г өөрчилж, дутуу сэргээдэг тул кодыг харж болох ч executable болж ажилладаггүй байх магадлалтай.

OllyDump

LordPE-р dump хийхэд тус програмын төлөвийг мэдэх боломжгүй байдаг. Ерөнхийдөө програм задарч дуусаад санах ойд ачаалагдангуутл авах шаардлагатай. Үүнийг хийхдээ ямар нэг debugger ашиглаад malware-н задрах функц дуусах цэгт breakpoint үүсгээд, зогсох мөчид LordPE юм уу OllyDump (OllyDBG-н plugin)-гаар dump хийнэ.

UPX-ийн хувьд executable дотор нь анхны програм нуугдаастай байдаг. Unpack хийж дуусаад UPX1 section дуусангуут анхныхаа програмын эхний инструкцруу шилждэг.

UPX-ээр pack-лагдсан tnnbtib.exe-н хувьд DB00-ийн цуваа эхлэх газарт unpacking-аа дууссан байдаг.

Зураг 42. Breakpoint тавих цэг

Энэ цэгт breakpoint тавьж, step over хийнэ. Ингэсний дараа Plugins->OllyDump сонгож, dump хийнэ.

OllyDump-ийн ашигтай тал нь Import table-г зөв үүсгэж, шууд ажиллуулж болдог executable-г үүсгэдэг.

Зураг 43. Dump хийх хэсэг

Memory Map үүсгэх

OllyDBG-н memory map-г ашиглан (Alt+M) хэрэгтэй гэсэн section-г сонгон, “Dump in CPU” дээр дарна. Энэ тохиолдолд UPX0 хэсэгт анхны executable-н код байрлаж байв.

Зураг 44. Memory Map-г ашиглаад dump хийх

Үүнийг харвал OllyDBG-н зүүн доод буланд UPX0-ийн заасан хаягтай (401000) өгөгдөл 16таар гарч ирж байна. Үүнийг код хэлбэрээр харахын тулд баруун товчлуур->Disassemble дээр дарна. Ингээд харвал өмнөх дасгалуудад яригдсан 4020C5 руу очиж, кодыг нь харж, Breakpoint тавих, код өөрчлөх гэх зэрэг үйлдлүүдийг хийж болж байна. Ердийн unpacked executable-г задлахаас ялгаатай нь зарим shortcut хэрэглэж болохгүй байв (заавал зохих менюг сонгож дарж байв).

Автоматчилсан unpacking

OllyScript ашиглан тухайн packer-т зориулан бичсэн script-г ашиглаад unpack хийж болно.

Хэрэглэх сайт: http://www.openrce.org/downloads/browse/OllyDbg_OllyScripts

QuickUnpack (QUnpack) нь ExeShield, FSG, LameCrypt, NeoLite, NsPack, PECompact, PEX, Sopelka, Yoda Protector гэх зэрэг хэд хэдэн packer-г задлах чадвартай.

Хэрэглэх програм: qunpack.ahteam.org

Rootkit

Rootkit нь халдагчийг нуух, эсвэл халдагчийн хэрэглэж буй хэрэгсэл, програмыг нуудаг. Үүнээс гадна зарим системийн програмыг солих, эсвэл өөрчилдөг (task manager г.м.)

Rootkit-г хоёр ангилдаг:

  • User-mode: Процессуудыг өөрчилдөг. Кернелд өөрчлөлт оруулахгүй.
  • Kernel-mode: Диск буюу санах ойд байгаа кернелийн хэсгүүдэд өөрчлөлт оруулдаг.

User-mode rootkit

Эдгээр нь DLL injection хийдэг. Windows нь hardware, kernel-тэй шууд харьцдаггүй. Процессүүд нь харьцахийн тулд ntdll.dll гэх мэт dll-д хандах замаар харьцдаг. Өөрөөр хэлбэл тус dll-д агуулагдах функцуудыг хэрэглэдэг. Ерөнхийдөө dll дахь функцуудын ажиллагааг солих замаар халддаг:

  1. Хэрэглэгчийн зод нь dll-н өөрчлөгдсөн функцийг дуудна
  2. Өөрчлөгдсөн dll нь удирдлагыг rootkit руу шилжүүлнэ
  3. Rootkit нь сангийн функцийн эхний хэдэн байтыг буцааж тавьж, түүнийг дуудна (сэргээнэ)
  4. Функц нь кернелрүү хандаж системийн call хийнэ
  5. Кернел хариугаа сангийн функц руу буцаана
  6. Rootkit нь сангийн функцийн эхний хэдэн байтыг буцаагаад өөрчлөнө.
  7. Rootkit нь сангийн функцээс буцаагдсан мэдээллийг өөрчлилж, анхны хэрэглэгчийн код руу буцаана

Rootkit нь санах ойд ачаалласан dll-г л өөрчилдөг бөгөөд хоёрдагч санах ойн dll-д өөрчлөлт оруулахгүй.

Халдах үйл ажиллагаа

Халдахдаа хоёр зүйл хэрэглэдэг:

  • DLL injection - Rootkit кодыг процесстачааллах
  • API hooking - Функцийг таслан зогсоох

DLL injection

Энэ нь процесс ажиллаж байх зуур хорт кодыг (.dll) нэмж өгөх үйлдэл юм. Хоёр арга байдаг бөгөөд өөр өөр API call хэрэглэдэг:

  • SetWindowsHookEx – зөвхөн GUI ашигладаг програмд хэрэглэдэг
  • CreateRemoteThread/LoadLibrary – бүх програмд ажилладаг (NT/XP)
  • Дээрх нь Vista/7 дээр ажиллахгүй

Windows Hook

График орчинд event үүсэхэд мессежийг тухайн програм руу явуулдаг. Эдгээр мессежийг дундаас нь барьж авахын тулд hook хэрэглэдэг. Мессежийг хүлээж аваад хэд хэдэн шүүлтүүрээр оруулдаг (filter chain). Эдгээр шүүлтүүрүүд нь мессежийг хүлээж аваад дурын кодоо ажиллуулах боломжтой.

LoadLibrary(), GetProcAddress() нарыг ажиллуулна.

SetWindowsHookEx-г ашиглаад процесст hook-г үүсгэдэг. Ингэхдээ dll, функц нарыг тодорхойлж өгнө. Дараа нь халдагч процесс нь өөрөө мессеж илгээх, эсвэл мессеж үүсэхийг хүлээж (товч дарагдах гэх мэт) болдог.

Процесс рүүмессеж илгээсний дараагаар windows нь DLL-г процессийн эзлэх санах ой руу чиглүүлж илгээнэ (шүүлтүүр нь). Дараа нь хорт код агуулсан шүүлтүүр рүү явуулдаг.

Windows 7 DLL injection

  • Windows 7-д автоматаар dll-г дуудах регистрийн key хэвээрээ байгаа ч disabled байдаг, гэхдээ Server 2008-д enabled байдалтай
  • UIPI (User Interface Privilege Isolation) нь доод түвшний integrity-тэйпроцессүүд дээд түвшний процесс рүү бичихийг хориглодог. (explorer нь medium байх тул үүнээс дээш зэрэглэлтэй програмуудаас injection хийх боломжтой)
  • Social engineering хийх

Reflective DLL injection

LoadLibrary()-г хэрэглэснээр ачаалласан dll-үүдийг харах боломжтой байдаг. Харин гар аргаар dll injection хийвэл нууц байх магадлал өндөр, manual mapping, reflective dll injection гэж нэрлэдэг. Metaspoilt үүнийг хэрэглэдэг болсон. Үүнийг илрүүлэхэд хэцүү, виртуаль санах ойг хянах ёстой болдог.

API Hooking

ntdll()-ийн функц дуудах гэж байхад rootkit-г дуудна. Хэрэглэдэг API call:

  • GetProcAddress() - Hook хийх функцийн хаягийг олох
  • VirtualProtect() - Санах ойн зөвшөөрлийг унших/бичих болгох
  • ReadProcessMemory() - Хадгалагдсан процессийн эхний хэдэн байтыг хадгалах
  • JMP - Шинэ инструкцийг тооцоолох
  • Manual copy эсвэл WriteProcessMemory() - Халдагдсанпроцессийн эхний хэдэн байтыг дарж бичих
  • VirtualProtect() - Санах ойн зөвшөөрлийг анхны утга руу буцаах

Hooked Function (rootkit-н үйл ажиллагаа):

Анхны төлөвт оруулах, анхны функцийг ажиллуулах, дахин hook хийнэ гэсэн ажиллагаатай.

Patch хийх үйл явц нь анхны програмыг өөрчилж (dll injection гэх мэтээр), өөр нэгэн дэд програм (rootkit) рүү үсэрдэг болгодог. Үсэрч орсоны дараа rootkit нь програмыг эхлээд анхны төлөв рүү шилжүүлээд, ажиллууллаад, эцсийн хариуг өөрийнхөөрөө өөрчлөөд эх програм руу шилжүүлнэ.

Энэ нь malware-н зориулалтгүй patch хийхэд бас хэрэглэгддэг. Файл нууж харуулах, сүлжээний API-г ашиглаад бүх траффикийг өөртөө хадгалах гэх мэтэд хэрэглэж болдог.

Kernel-mode rootkit: Direct Kernel Object Manipulation

Ямар ч rootkit-н ажиллагаа нь хэрэглэгч буюу кернелийн функцийн буцаадаг өгөгдлийг шүүх тал дээр анхаардаг. Энэхүү шүүх ажиллагаа нь хаана ч явагдаж байсан, кернел нь объектуудын жагсаалтыг хянах ёстой байдаг. Direct Kernel Object Manipulation гэсэн аргад кернелийн объектуудыг санах ойд өөрчилдөг.

Windows kernel-д ажиллаж буй thread, process-г EPROCESS, ETHREAD гэсэн бүтцүүдийн жагсаалт ашиглан track хийж байдаг. EPROCESS бүтцийн жасгаалт нь double linked list бүтэцтэй байна. Жагсаалтаас тухайн процессийг хасаж өгсөнөөр тэрхүү процессыг ажиллаж байгаа нь харагдахгүй болдог.

EPROCESS list-г олох: IoGetCurrentProcess()

Номзүй

Distler, Dennis. “Malware Analysis: An Introduction.” SANS.org. N.p., 14 Dec. 2007. Web. 03 Mar. 2013. <http://www.sans.org/reading_room/whitepapers/malicious/malware-analysis-introduction_2103>.

“Malware.” Wikipedia. Wikimedia Foundation, 05 Jan. 2013. Web. 02 May 2013. <http://en.wikipedia.org/wiki/Malware>.

“Reverse Engineering.” Wikipedia. Wikimedia Foundation, 05 Feb. 2013. Web. 02 May 2013. <http://en.wikipedia.org/wiki/Reverse_engineering>.

Sikorski, Michael, and Andrew Honig. Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software. San Francisco: No Starch, 2012. Print.

Zeltser, Lenny. “FOR610: Reverse-Engineering Malware: Malware Analysis Tools and Techniques.” Reverse-Engineering Malware: Malware Analysis Tools and Techniques. SANS Institute, n.d. Web. 02 May 2013.