Build IMSI catcher with single computer and hackrf One
For educational purposes only.
I am not responsible for any illegal activity
แล้วเราจะดัก IMSI ไปทำไมกันนะ?? ถ้าใครได้อ่านข่าวที่ส่งข้อความหลอกให้กดลิงค์, ส่งข้อความเชิญชวนเล่นการพนันออนไลน์ต่างๆซึ่งมีส่วนเกี่ยวข้องกับ IMSI ทั้งสิ้น ทำให้ผมรู้อยากเข้าใจการทำงานของมัน ย้ำว่าอยากเข้าใจ เผื่อที่จะพัฒนาระบบป้องกันในอนาคตได้แต่ก่อนที่เราจะป้องกันได้เราก็ต้องมาทำความเข้าใจก่อนว่าระบบการโจมตีของ attacker/hacker มันทำงานยังไงมาถึงตรงนี้คงคิดว่าแล้ว GSM หรือ 2G มันยังมีคนใช้อีกเหรอเพราะเราก็จะเห็นแต่ 4G, 5G กันหมดแล้วผมต้องบอกก่อนเลยว่ามันยังมี cell tower ที่เป็น 2G อยู่เพราะมันสามารถส่งข้อมูลได้ไกลกว่า 3G, 4G, 5G และ reliable มากกว่าทำให้หลายๆประเทศยังมี 2G cell tower อยู่นั้นเอง
IMSI มันคือ International Mobile Subscriber Identity ที่อยู่ใน SIM(Subscriber Identity Module) card โทรศัพท์ที่เราใช้ๆกันอยู่เพื่อใช้ในการระบุตัวตนในการเข้าใช้งานเครื่อค่ายโทรศัพท์ถ้ามองเป็นภาพง่ายๆก็คือ MAC address ที่เรารู้จักกันนั้นเองโดยมันจะประกอบด้วย 3 ส่วนหลักๆตามรูปด้านล่าง
ซึ่งประโยชน์ของมันคือการเชื่อมต่อกับผู้ให้บริการเครือข่ายให้เราได้โทรหาและเล่นเน็ตได้นั้นเองแต่ในทางกลับกัน attacker ก็สามารถที่จะดักข้อมูลไม่ว่าจะเป็น SMS, calling, location tracking
IMSI Catcher ทำงานโดยการ downgrade 3G/4G ไปเป็น 2G เพื่อให้ทำการดักข้อมูลสามารถทำได้เพราะตัว 2G ใช้ A3,A5,A8 ในการเข้ารหัสข้อมูลที่ค่อนข้างไม่แข็งแรง
-
A5 steam cipher ใช้สำหรับเข้ารหัสการติดต่อระหว่างโทรศัพท์กับเสา
-
A3 ใช้สำหรับ authentication ระหว่างโทรศัพท์กับ network ของผู้ให้บริการ
-
A8 ใช้สำหรับ session key
อุปกรณ์
- Notebook Linux OS => ผมใช้เป็นตัว DragonOS เพราะเป็นตัวที่มี tools ที่เกี่ยวกับ Software defined radio ครบถ้วน
- Hackrf One => ตัวใช้การตัวรับและส่งคลื่นในช่วง 1 MHz to 6 GHz แบบ half-duplex
- Antenna 35dBi => เป็นเสาอากาศที่รองรับช่วงคลื่น GSM/3G/4G
เริ่มกันเลย!
ผมเริ่มจากการสแกนหา 2G cell tower ในบริเวณใกล้เคียงโดยใช้คำสั่ง grgsm_scanner
ก็จะได้ผลลัพธ์ตามรูปข้างล่างซึ่งมันคือ 959.2M
หลังจากนั้นผมก็ใช้คำสั่ง grgsm_livemon -f 959.2M
สำหรับ sniff cell tower
แล้ว terminal จะแสดงค่าขึ้นมารัวๆ 2b 2b 2b 2b 2b 2b
ถ้าในกรณีที่รันคำสั่งแล้วไม่มีอะไรขึ้นให้ลองเปลี่ยนคลื่นหรือไม่ก็หมุนเสาอากาศไปในทิศทางอื่น
ต่อมาผมเปิด wireshark แล้วเลือก interface เป็น loopback:lo เพราะว่าตัว hackrf One จะเอา radio frame อยู่ในส่วนที่เป็น serial port(USB) ผมเลยต้องเปิดด้วย loopback ซึ่งจะเห็นว่ามี packet ของ GSMTAP เข้ามาเลื่อยๆ
สิ่งที่ผมต้องการคือ imsi เท่านั้น packet ตัวอื่นให้กรองออกไปโดยการใส่ e212.imsi
เข้าไปตรงช่อง search + enter
ที่นี้ผมก็สามารถที่จะดูตัว IMSI ของคนอื่นได้แล้วทุกคนจะเห็นว่าเราสามารถระบุประเทศ, ผู้ให้บริการ, ตำแหน่งจากเลข CID, LAC, MCC, MNC
Appendix