SIP нууц үг сэргээх
G-Mobile компаний интэрнэт утас гэдэг SIP утасны үйлчилгээг хэрэглэдэг. Жилийн өмнө эрх аваад утсан дээрээ суулгасан байсан юм. Өчигдөр гэрийн утсандаа холбох хэрэг гартал нууц үгээ мартчихаж. Утсан дээр бол нууц үг нь хадгалаатай байгаа боловч энкриплэгдчихсэн учраас ил харагддаггүй. Ингээд Монгол руу холбоо барьж нууц үгээ сэргээгдтэл өөрөө оролдож үзэхээр шийдэв.
Өгөгдөл барьж авах
Утас маань гэрийн wifi аар интэрнэтэд холбогдсон байгаа бөгөөд рүүтэр дээрээ дараах командыг ашиллуулж пакет барьж авав.
$ tcpdump -n -i rl0 -w sip.dump src host 203.91.115.91 or dst host 203.91.115.91
Авсан sip.dump файлаа Wireshark аар нээж ямархуу өгөгдөл байгааг харав. Мэдээж нууц үг гэхээр юм ил харагдсангүй. Жаахан судалвал Digest Access Authentication гэдэг аргаар холбогдож байгааг мэдээд авлаа. Пакет дотроос хэрэглэгчийн нэр, сэрвэрийн uri, hash түлхүүр зэргийг олоод авлаа.
Нууц үгийг олох
Digest Access Authentication нь сэрвэрээс явуулсан түлхүүрийг ашиглаад hash түлхүүр үүсгэж явуулна. Сэрвэр тэр түлхүүрийг өөрийн үүсгэсэн түлхүүртэй харьцуулна, нууц үг сүлжээгээр хэзээ ч дамжихгүй юм. Миний нууц үг 6 оронтой тоо байсан гэдгийг бүүр түүрхэн санаж байгаа учраас brute force attack хийхэд маш боломжын юм. 1 сая хувилбар шалгана гэдэг бол хэдхэн секундэд л багтчих учраас хялбар ruby script бичээд нууц үгээ сэргээчихлээ.
$ irb
>> load 'sip\_cracker.rb'
>> sip = SipCracker.new('98989898', 'REGISTER',
'sip:203.91.203.91', '',
'5a14e7431e75a6df28de476048e4cd3f',
'3b066b0a81044cb624990b0e4368d4b7')
>> sip.crack(6)
>> Password found: 123456
Хэрэв нууц үг тоо үсэг зэргийг агуулсан, нилээн урт байсан бол brute force хийхэд маш их хугацаа орж болох талтай. Ийм тохиолдолд С дээр бичих нь ч дээр байж мэднэ.
Сэрвэрийн хаяг, хэрэглэгчийн нэр, нууц үг болон түлхүүр зэрэг нь бодит өгөгдөл биш ;)