Sunday, April 28, 2013

Харуул занги

2013 оны 4-р сарын 25-нд болсон "Харуул занги" хэмээх цахим аюулгүй байдлын тэмцээнд оролцсон тухайгаа дурдъя.
Ийм нэгэн тэмцээн болох талаар ердөө 14 хоногийн л өмнө сүлжээний үндэс хичээлийг үзэж байсан багшаасаа сургуулийн facebook хуудсаар дамжуулан сонсоод ороод үзэхээр шийдлээ. Юу ирдэг яг ямар учиртай тэмцээн болохыг үнэндээ нь сайн ойлгохгүй л байлаа. Ямартай ч мэдээллийн технологийн салбартай холбоотой л юм болохоор оролцож үзье л гэж бодлоо. Ангийнхаа 1 хүүхэдтэй баг болоод юу ч гэсэн бүртгүүлчих вээ.

"Эрвэл олдоно" хэмээх нэртэй 1-р үе нь онлайнаар боллоо. Даалгавруудаа татаж аваад хартал AnalyzeME, DecodeME, DecryptME, DiscoverME, RecoverME гэсэн үндсэн бүлэг даалгавруудтай байв. Эхэндээ ч яг яах, яаж оноо авах талаар юу ч мэдэхгүй байв. Харин хамгийн эхлээд манай багын нөгөө гишүүн маань DecodeME-н 4-р даалгавар болох Morse-р кодлосон байсныг нь тайлан анхныхаа token-оо гаргаад авчихлаа. Ингээд л цаашаа оноог авч өгсөн дөө. Тэмцээнд хамт орсон ангийнхаа бусад багуудаас зарим 1 даалгавар дээр тусламж авснаа нуух юун.

Шөнийн 2-н цаг өнгөрч тэмцээний цаг бараг дуусч байлаа. AnalyzeME-н даалгавруудаас бусад даалгавар оноо нь шууд орж тооцогдож байсан бөгөөд 170-н оноотой болсон байв. Decoding болон decrypt зэргийг л голчлон гүйцэтгэв. Steganography-н баахан tool хайж хайж хэдэн даалгаврыг нь гүйцэтгэсэн. Ингээд цаг нэлээд дөхсөн тул AnalyzeME-н бүх даалгавар дээр багийнхаа гишүүнтэй зөвлөж байгаад богино хэмжээний тайлбар бичээд л бүгдийг нь илгээчихлээ.

Маргааш нь өдрийн 1 цагт дүн гарч AnalyzeME-с 40-н оноо буюу нийт 210-н оноотой болсон байв. 1-р шатны дүнгээр 2-р байранд манай баг жагсжээ. Дүнгээ хараад бөөн баяр, эхний үеэ л давбал их юм хэмээн бодож байсан маань улам даварч 2-р үеийг л давчихвал гэж бодов.

1-р үеээс SESI багийн оноо авсан байдал:
Decryption 1 - 10
Decryption 2 - 10
Decryption 3 - 10
Decryption 4 - 10
Decryption 5 - 10
Decryption 6 - 10
Decryption 7 - 10
Decryption 8 - 10
Decoding 1 - 10
Decoding 2 - 10
Decoding 3 - 10
Decoding 4 - 10
Decoding 5 - 10
Decoding 8 - 10
Steganography 2 - 10
Steganography 3 - 10
Steganography 5 - 10
Analysis 2 - 10
Analysis 3 - 10
Analysis 4 - 10
Analysis 5 - 10

Нөгөөдөр нь буюу 4-р сарын 25-нд 2-р үе onsite хэлбэрээр болов. Тэмцээн ч эхэллээ. "Монголын нууц товчоо" хэмээх 2-р үеийн даалгавруудыг Mobicom компаниас зохиосон байсан бөгөөд өгөгдсөн даалгавар, тэдгээрийг Монголынхоо түүх соёлтой сэдвийнх нь хувьд холбосон байдал зэрэг нь үнэхээр сэтгэлд хүрсэн.

2-р үеийн үргэлжлэх хугацаа 3-н цаг байв. Ороод нилээн ч суулаа. Нийт 3-н цагийн маань бараг 2 цаг нь өнгөрөв. Оноо авч чаддаггүй ээ. Бусад багууд оноо аваад л байдаг. Анх удаа ийм тэмцээнд орж байгааг хэлэх үү, яг хажууханд хэдхэн метрийн цаанаас үзэгчид хараад л, өрсөлдөгчид өөдөөс хараад ойр ойрхон оноо аван түүнийг зарлах нь сэтгэл зүйд тун сөргөөр нөлөөлөөд байх шиг. Бүр сандраад толгойд юу ч орж ирдэггүй дэмий л даалгавар бүрийг гүйцэтгэсэн ч юм байхгүй хальт эргүүлж тойруулж ухаж суутал хамаг цаг маань явчихлаа. Ингээд өнгөрдөг юм байж л гэж бодлоо. Тэр үед хамгийн өндөр оноотой баг нь 300 гарчихсан байсан байх. Манайх 0 оноотой. Ядаж л оноо авчих юмсан л гэж бодлоо.

Хамгийн эхэнд барьж авсан даалгавар маань Trivia-н 50-н онооны Оньсого гэдэг даалгавар байсан юм.
"sub al, 0x2c үйлдлийн (instruction) опкод (opcode) юу вэ?
Хариултаа 0xFFFF форматаар оруулна уу."

Ердөөсөө л энэ. Ассемблер хэл гадарладаг хүнд бол хялбархан л асуулт. Opcode-г нь 2C2C гэдгийг мэдэж байгаа мөртлөө л давуулж чадаагүй. Сүүлд нь давуулж чадсан багаас сонсоход Flag-аа илгээхдээ "2C2C" гэж илгээх биш яг "0x2C2C" гэж илгээх байсан юм билээ. Миний хувьд ойлгохдоо 0xFFFF хэлбэрээр илгээнэ үү гэдгийг нь binary биш hexadecimal гэдгээ л хэлж байгаа юм байна гээд л шууд бодчихсон хэрэг. Эхнээсээ л ингээд үл ялиг жижиг зүйлээс бага зэрэг бүтэлгүйтээд эхэлчихсэн юм билээ.

Гэтэл харин багийн гишүүн (Т.Батсаруул) маань тэмцээний үед шүүгчдээс өгч байсан жижиг тусламжийг ашиглан гар утасны товчлуурыг ашиглан нууцалсан байсан Trivia-н Элч хэмээх даалгаврыг гүйцэтгээд 50-н оноотой болов. Бөөн баяр :) Ямар ч байсан оноо авчихлаа нойллоогүй л болоо гэж бодоод санаа амран бараг л сандрахаа больчихлоо.

Багийнхаа гишүүнтэй ярилцаж байгаад тактиктай үзэхээр шийдлээ. 50-н оноо авсан ч гэсэн 9-р байрт л бичигдэж байв. Өндөр оноотой 4-н баг нь 3-р үед өрсөлдөх тул одоо шууд 200, 300 гэх мэт оноотой даалгаврыг л хийх гэж оролдохоос өөр сонголт байсангүй.

Нээгдсэн даалгавруудаас хамгийн өндөр оноотой нь Vulnerability-н 300-н оноотой Өэлүн эх гээд даалгавар байв. Харсан чинь PHP дээрх код байв. Өмнө нь вэб програмчлал хичээл дээр болон бие дааж л PHP дээр жижиг сажиг юм хийж үзэж байсны л хэрэг гарлаа даа. Даалгаврын гол санаа нь гэвэл:
if (strcmp($arg1, "arg1value1")==0){
if (strcmp($arg2, "arg2value1")==0){
if (strcasecmp($arg1, "arg1value2")==0){
if (strcasecmp($arg2, "arg2value2")==0){
if ($arg1==arg2){
echo $flag;
}}}}}

энэ бүх нөхцөл шалгалтууд(IF)-г даваад буюу бүх бүгдийг нь true буцаалгаж л чадвал flag-аа буюу оноогоо олоод авчихна. Гол асуудал нь PHP дээрх 1 хувьсагч (дан ганц PHP ч бус бусад бүх хэлүүд) 2 тэс өөр утгатай нэгэн зэрэг тэнцүү байх боломжгүй. Би ч бүр гайхлаа. Хичээл дээр иймэрхүү юм зааж, өмнө нь сонсож байсан биш. Ямартай ч болдог болоод л даалгавар болгож оруулсан байж таарлаа гээд л оролдож үзлээ дээ. Харьцуулж буй 2 хувьсагчаа GET-р дамжуулж авч байсан бөгөөд string дамжуулбал эхний 2 л нөхцөлийг биелүүлээд цааш явахгүй нь тодорхой байв. Тиймээс string биш өөр юм дамжуулж байж л болох юм байна тэр нь магадгүй обьект юм уу массив байж болох юм гээд дамжуулж үзье гэж бодлоо.

За тэгээд оролдож байгаад массив дамжуултал болж байна шүү. Учир юунд вэ гэвэл PHP-н strcmp функцэд аргументууд нь string байх ёстой бөгөөд бусад төрөл ороод ирвэл шууд NULL утга буцаах бөгөөд харьцуулахдаа === биш == гэж харьцуулсан тул тэр нь 0-тэй тэнцэж байгаа юм байна л даа. Ингээд л 300-н оноотой боллоо. Хөтлөж байсан ах маань ч 9-р байранд явж байсан SESI баг 1-р байранд орж ирлээ, өрсөлдөөн тун ширүүслээ гээд л зарлалаа. Тун ч их баярлав.

Үүний дараа web-н шонхор гэсэн даалгавраас 100 оноо авсан бөгөөд уг даалгаврын гол санаа нь 1 жижиг зураг байгаа бөгөөд onmouseover буюу хулганы курсор дээр нь очих үед санамсаргүй байршил руу шилжихээр кодлогдсон байв. Гол зорилго нь тэр шонхор дээр очиж хулганаараа дарах байсан бөгөөд гараар хийнэ гэвэл миний бодлоор боломжгүй юм. Иймээс Google chrome-нхоо inspector-г нь ашиглаад дээр нь дарахад үүсэх event-г нь хялбархнаар олсон бөгөөд success.php?dfsadfjaks4h34kj3h4 иймэрхүү хаяг руу үсрэхээр кодтой байв. Ингээд л энэ url-руу нь ортол шууд л flag маань гараад ирчихсэн.

Ингээд нийт 454 оноотойгоор 2-р үеийг дуусгасан бөгөөд манай SESI баг 2-р үеийн оноогоороо 1-рт бичигдэж байв. Уг нь бол Монголын нууц товчоо гэсэн энэ үеийн даалгаврууд нь боломжийн байсан бөгөөд ямар ч багт өндөр оноо авах хангалттай бололцоо байсан. Гэвч яг сэтгэл хөдлөл, сандрал зэрэг тухайн үеийн нөхцөл байдлаас болоод үнэхээр сохорчихсон байсан бололтой. Оноо авчхаар энгийн даалгаврууд өчнөөн л байсан юм билээ. Сүүлд нь гэртээ ирээд анализ хийгээд харж байхад л анзаарсан.

3-р үедээ ингээд шилдэгт 4-н багт нь шалгараад орлоо. Бидэнд 1 хост өгөгдсөн бөгөөд түүний vulnerability буюу цоорхой нүхийг нь олоод нэвтрэн, дараад нь түүнийгээ засаж оноо авах ёстой байлаа. Их сургуульдаа сүлжээний үндэс гэсэн хичээл үзсэнээс өөр сүлжээний мэдлэггүй, unix үйлдлийн системийн анхан шатны чадвараас өөр юмгүй бид 2-т тун хүнд санагдав. Хэд хоногийн өмнө татаж авсан Backtrack-аараа ухаж metasploit framework дээр суурилсан armitage гээд график интерфэйстэй 1 tool-р уг нь нэвтэрвээ. Өөрөө янз бүрийн exploit-ууд шалгаад уг нь нэвтэрчихдэг юм билээ. Тэгээд 1 root эрхээр нь нэвтэрсэн terminal гаргаад уг нь өгөх юм. Даанч үнэхээр мэдлэг дутаад засаж чадахгүй юм билээ. Угаасаа бэлэн tool-р нэвтэрсэн болохоор нэвтэрсэн аргыг нь ч сайн тайлбарлаж чадахгүй байсан. Ингээд л 3-р үе дээрээ 0 оноо аваад 4-р оров.

Аз болж 4-р үед орох завшаан манай багт тохиолдов. Хэрвээ 4-р үед өгсөн даалгаврыг гүйцэтгэж чадвал манайх 3-р байранд орох байсан боловч хараахан амжаагүй юм. 4-р үеийн даалгавар нь 1 IP хаяг, SSH-р хандах username, password өгсөн байлаа. Хандаад үзтэл дотор нь 1 pcap файл байх нь тэр. Яаж тэрийг нь татаж авах вэ гэж бодоод scp гэдэг комманд судалж байтал манай багын гишүүн шууд FileZilla ашиглаад татаад авчихлаа. Нээгээд үзтэл сүлжээний траффик байв. Сүлжээний талын мэдлэг сул тул бас л жаахан будилсан. Ямартай ч тэр бөөн сүлжээний packet дотроос ftp-р дамжуулсан id_dsa.zip файлыг нь гаргаад авчихлаа.

Хамгийн гол асуудал нь би алдаа гаргаад гаргаж авсан файлын өргөтгөлийг zip файл гэж анзааралгүй шууд л яагаад ч юм бэ id_dsa гэдэг үгийг нь хараад ч тэр үү id_dsa.pub гээд хадгалчихсан байсан. Ингээд pub файлаас түлхүүр гаргаж авах гэж оролдсоор хамаг цагаа үрсэн дээ. Эцэст нь zip файл байсныг цаг дуусах дөхсөн үед л мэдсэн. Тэгээд zip файл болгоод нээх гэтэл нууц үг нэхэж байна. Нууц үг нь уг нь нөгөө pcap файлын бараг төгсгөл хавьд нь "Nuucyg tailax gerege "D5bSafuEbb"" ингэж илгээгдсэн байсан юм билээ. Гэвч 4-р үеийн цаг нь 30-н минут байсан тул нууц үгийг нь олох гэсээр байтал цаг дуусчихсан. Ингээд 3-р байранд орох боломжоо алдсан даа. Магадгүй 5 юм уу 10-н минутын хугацаа илүү байсан бол олчих л байсан байх даа.

Ингээд л манай баг 4-р байранд шалгарлаа. Анх энэ тэмцээнд энэ жилдээ зүгээр л ороод үзье, 1-р үеэ л давбал их юм гэж бодож байснаа бодоход амжилттай.

4 comments:

  1. хэхэ сайн байнашд :D. Тэгээд би сүүлд МУИС-н нэгдээр таараад хэддүгээр байранд орсон гэж асуугаагүй юу санаж байна уу хаха.

    ReplyDelete
  2. Мэдээллээ хуваалцсанд баярлалаа. Мундаг байна шүү. Амжилт!

    ReplyDelete
  3. Bayarlalaa. Temtseen n ih sonirholtoi yum bna. Daraachiinhd n orhig bodnoo.

    ReplyDelete
  4. sain bn amjilt husey daraa jil boloh yumuu

    ReplyDelete