Thursday, March 17, 2016

Reverse Engineering-с хамгаалах(үргэлжлэл)

Parent Process
Windows хэрэглэгчид windows shell-р процесс ажиллаж эхэлдэг. child process-ийн  parent process буюу Explorer.exe юм. Explorer.exe -ийн ID -г сольж болно мөн parent process болон тэдгээрийг харьцуулж болно.
Self Debugging 
Self Debugging нь child process-c дебаг хийж child process үүсгэн олширдог. Ижил процессудыг залгаж бусад дебаггераас сэргийлдэг, гэсэн хэдий ч EPROCESS->DebugPort(EPROCESS нь PsGetProcessId функцийн кернелээр буцаж ирсэн бүтэц юмэнд засвар хийж алгасаж болно. Энэ нь дебаггер хийсэн процесс-д дебаггер хийх боломжтой. 

UnhandledExceptionFilter

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


Wednesday, March 16, 2016

Reverse Engineering- ээс хамгаалах(үргэлжлэл)

RDTSC

RDTSC буюу 32 битийн инструкц Read Time-Stamp.  Өөрөө өөрийгөө өөрчилдөг. Пентиум процессороос хойшхи загварууд дээр процессорлуу тоологч нэмэгдсэн, клок цикл бүр дээр өссөн нэмэгддэг, процессор нь 0 болох үед дахин ачааллана. timig attack-н нэг сайн зүйл нь энгийнээс арай гайгүй гүйцэтгэлтэй юм, бшх хөгжүүлэгч нар timing attack-ийг ашиглаж хамгаалах функцийг шийдэх хэрэгтэй, тэгээд энэ нь кодын блокуудыг энгийнээр бүслэж програм зохиогчийн тавьсан хязгаартай харьцуулна, энэ ихээр ажилласан бол програм хаагдана.

Win32 timing Функц
Windows internals
Windows үйлдлийн системийн онцлог нэг шинж нь хамгаалалтын эрэмблэдэг, дебагаас ирж байгаа урсгалыг нуух, дебаггер байгаа илрүүлэх. ntdll.dll-с экспортлож ашигладаг. 
ProcessorDebugFlags
ProcessDebugFlags (0x1f) нь NtQueryProcessInformation функцруу undocument байдлаар өгнө. NtQueryProcessInformation нь ProcessDebugFlags энэ классыг дуудна, хэрвээ дебаггер хийх юм бол EPROCESS->NoDebugInherit - энэний эсрэг утгыг буцаана. дебаггер хийгдсэн бол false утга буцаана. 
CheckProcessDebugFlags:

BlockInput

Програмын хамрах хүрээнээс шаардсан, гар болон хулганы блокууд байна , Энэ техник нь зөвхөн bloackinput-ийг дуудсан урсгалд хүчин төгөлдөр байна, 

OutputDebugString

OutputDebugString нь OutputDebugString - ийн алдааг хайж олоод ажиллана. тэмдэгт хүлээж авах ямар ч идэвхгүй дебаггер байгаа бол энд алдаа заана, OutputDebugString -ийг дуудаж алдаагүй бол энийг дуусгана.

Open Process

Хэрвээ процесс нь дебаггерийн дор шууд ажиллаж байвал, захиалганд халдлага хайх болно. Хэрвээ процесс нь дебаггер-р зөв биш ресет хийх юм бол процесс нь SeDebugPrivilege ямар нэгэн процессру нээлттэйгээр хандахыг зөвшөөрнө.csrss.exe-г дэмжиж ажиллана.






Tuesday, March 15, 2016

Reverse Engineering- ээс хамгаалах

Breakpoint
Breakpoint нь 3н төрөлтэй байна. Hardware, санах ой болон INT 3h breakpoint байна. Breakpoint нь r.e-н чухал хэсэг юм, энэ зүйл байхгүйгээр дүн шинжилгээ хийх  боломж бага байна. Breakpoint нь програмын ажиллагааг зогсоохыг зөвшөөрдөг, R.E нь windowsAPI-д breakpoint-ийг оруулсанаар мессежүүдийг хайхад хялбар болгодог. Энэ нь магадгүй хамгийн сайн кракдах техник байх, Тэмдэгтүүдээр хайх болно. Breakpoint нь API -ийн маш чухал  MessageBoxVirtualAlloc,CreateDialog  эдгээр зүйлсийг шалгана. 
INT 3h

INT 3h breakpoint нь IA-32 инструкц дотор cc(0xcc) опкодтой тавигдана. Breakpoint-ийн хамгийн их хэрэглэдэг жишээ нь 0xCD, 0x03 дараалалаар илэрхийлэгдэнэ энэ нь бас төвөгтэй. Breakpoint-ийн хайх төрөл нь харьцуулбал энгийн, зарим кодууд нь энгийн байдаг. Гэсэн хэдий ч бид энэ хайх аргыг хэрэглэж байхдаа болгоомжтой байх хэрэгтэй шүү.
INT 3h breakpoint-ийг шалгах өөр нэг obfuscate арга байна. Ингэж буцаж эргүүлэх нь дээрх кодтой ижил гэдэгийг санах нь чухал. Энд төөрөлдүүлэх зүйл нэмж өгсөн, ингэснээр таны програмыг хамгаалж болох юм. 
Memory Breakpoint

Memory Breakpoint нь хамгаалалтын хуудсуудыг ашиглаж дебаггер хийж гүйцэтгэдэг, Тэнд санах ойн хуудсанд хандах нэг удаагын дохиолол байна. Санах ойд хамгаалалтын хуудас байна тэгээд тэнд хандана. STATUS_GUARD_PAGE_VIOLATION энэ зүйлийг босгож дараа нь програм шийдэх болно. Энэ Memory Breakpoint-ийг шалгах зөв арга юм. Хэрвээ програмын дибаг доор ажиллаж байгаа бол түүнийг илрүүлж memory breakpoint-г гүйцэтгэлийг ашиглаж дебаггер хийх болно. Денамик буфферийг байршуулж буфферлүү RET бичнэ. Дараа нь хамгаалалтын хуудсыг тэмдэглэж дараа нь стек дээр буцах хаягийг байршуулна. Тэгээд өөрсдийн хуудасруу үсрэнэ.
Hardware Breakpoint 
Hardware Breakpoint нь процессорын архитектур дотор intel-р гүйцэтгэгдсэн техник юм, тусгай регистеруудыг ашиглаж удирддаг,  Dr0-Dr7 хүртэл байна, үүнд Dr0-Dr3 хүртэл breakpoint-ийн 32 битийн хаяг регистер байна. Dr4-5 хүртэл intel-д нөөцөлсөн бусад дебаг хийх регистерүүд байна, Dr6-7 breakpoint-ийн онцлог шинжийг удирдаж ашиглана. Dr6-7 жоохон бит-д хэтэрхий их мэдээлэл агуулж байдаг. Breakpoint-ийг устгах эсвэл хайя, Ингэхий тулд 2 арга байна. Win32 GetThreadContext болон SetThreadContext эсвэл Structured Exception Handling ашиглах.  Одоо жишээн дээр WIN32 API   Функцийг ашигласан байна.

Structured Exception Handling (SEH)
Timig Attack 
Timing attack-ийн гол онол нь кодын хэсэгийг ажиллуулна, зөвхөн хугацааны жижиг хэсэгийг л авах юм. Хэрвээ кодын жижиг хэсэгийг авчихвал түүнд хугацааг хязгаарлана, тэгээд дебаггер нэмсэнээр хэн нэгэн кодыг алгасаж болно. Энэ төрлийн халдлагад олон жижиг өөрчлөлт байна, ихэнх нь IA-32 RDTSC  инструкц ашигладаг. БУсад өөр арга нь timeGetTimeGetTickCount, болон QueryPerformanceCounter.


Monday, March 14, 2016

Hybrid арга 2: Нэг сувагт хаш механизм

Hybrid арга 2
Нэг сувагт хаш механизм
Сегмент код нь програмын сериал дугаар үүсгэхийг хариуцдаг. Хакер юмуу кракер-д аль болох ил харагдахгүйгээр нууж өгөх ёстой. Нэг суваг хаш хийгдсэн сегмент код нь кракерд пассворд харагдах чадваргүй болгодог, энэнээс илүү холилдсон өгөгдөл харагдана. Энэ нь програмын бүх функцруу хандах сериал дугаарын хүсэлтийг мэдэгдүүлэхгүй болгодог. Сериал дугаар үүсгэх сегмент кодыг нь нэг суваг хаш ашиглаж бусад кодыг нь шифрлэнэ.
Зураг 2 дээр нэг сувагт хаш хийж байгаа мөн шифрлэж байгаа. Эхлээд obfuscation нууц үг нь сегмент кодоос үүссэн байна, 2 дахь нь бусад кодыг мөн байгуулж байна. Аль аль процесс нь хаш функцийг ашиглаж шифрлээд кракерийг ойлгохоос сэргийлж байна.
зураг 2
Нэг сувагт механизм ашиглаж сериал дугаарыг хаш хийж байна.
Өөрөө өөрчлөх механизмийн диаграм
Зураг 3
Зураг 3 дээр өөрийгөө өөрчлөх техникийн гүйцэтгэлийн харуулсан байна. Энд програм хангамжаас 2 файл дуудаж ажлуулна. Ажилгааны файл болон тохиргооны файл байна. Програм ажиллах үед эхлээд сериал дугаар оруулахийг сануулсан байна. Тэгээд сериал дугаарын програмын интерфейсд оруулсан байна. Програм тухайн сериал дугаарын үнэн үгүйг шалгана. Хэрвээ сериал худлаа бол програмын ажиллагааг зогсооно. Хэрвээ сериал дугаар үнэн бол хаш утга нь бодоглдож тохиргооны файлын хаш утгатай харьцуулагдсан байна. Хэрвээ хаш утга нь худлаа байвал програмын ажиллагаа зогсоно. Хэрвээ хаш утга нь тэнцчихвэл мак хаяг ашиглаж сериал дугаарыг бодно. Шинэ бодогдсон хаш утга нь тохиргооны файлд хадгалагдаж програм шинэчлэл хийгдэж тохиргооны файлд нь хадгалагдах болно.




Hybrid хамгаалалт

Програмыг хууль бус эвдэхээс хамгаалах hybridize хамгаалалт.
Програм хангамжийн obfuscation болон шифрлэх техник, нэг сувагт хаш техник нь Reverse engineering дайралтыг эсэргүүцэх юм. Энэ загвар нь жинхэн кодыг функц-д хувиргалт хийх юм, энийг obfuscation болон нэг сувагт хаш техникийн дэмжлэгтэй ба reverse engineer хийхэл хэцүү болох юм. Гол санаа нь кодыг нуух юм. Програм хангамж нь хувиргасан функ нь жинхэнэтэйгээ ижилхэн гэхдээ ойлгоход маш төвөгтэй байх ёстой. obfuscation механизмийг нэмж өгснөөр ажиглахад тун хэцүү болох юм. Энэ аргаар хийсэн 2тын файлд, жинхэнэ кодын хэсэгүүд хакер эх кодыг ойлгоход хэцүү байх юм. Энэ арга үндсэндээ 2 хэсгээс бүрдэнэ: 1т инструкцийн байг нуух,инструкцийн бай гэдэг нь эх кодын хэсэгүүд нуугд байх юм. Энэ техникд, сериал дугаарын сегмент кодын генератолсан схем байна. Бид шифрлэх механизмийг ашиглаж програмын эх кодон дотор пассвордыг нуух юм. Энд пассвордын хаш хийгдсэн хувилбар байна.Хэрвээ хакер пассвордын агуулсан файлыг олох юм тэнд холилдсон өгөгдлийн цуглуулгууд байх болно. 2 дахь хэсэг: хаш хийгдсэн пассвордын аль алин дээр нь obfuscate хийж тэгээд obfuscate хийгдсэн инструкцийг эх кодын сегментүүд дээр нэмж өгнө. Hybrid техник нь өөрийгөө өөрчлөх механизм байна, энэ нь пассвордыг нууж нэг сувагаар хаш хийнэ мөн эх кодыг obfuscate хийнэ. кракер нь эвдэж чадахгүй учир нь obfuscation код харагдах юм. Энэ аргаар хамгаалах юм бол ойлгоход их төвөгтэй болох юм, кракер нь хамгаалалтыг болиулахад хэцүү юм.

Obfuscation механизм

Тухайн програмын эх код болон сериал түлхүүрийг төөрөлдүүлэх зорилготой алгоритм юм. 
энгийн код
obfuscation хийсэн код