๐ฑ IMSI ์ํธํ: ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ ๋ณด์์ ์ํ ํ์ ์์
1. IMSI๋ ๋ฌด์์ธ๊ฐ์?
IMSI(International Mobile Subscriber Identity)๋ ๊ฐ ๋ชจ๋ฐ์ผ ๊ฐ์ ์์๊ฒ ๋ถ์ฌ๋๋ ๊ณ ์ ํ ์๋ณ์๋ก, SIM ์นด๋์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ํต์ ๋คํธ์ํฌ์์ ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. IMSI๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค:
- MCC(Mobile Country Code): ๊ตญ๊ฐ ์ฝ๋
- MNC(Mobile Network Code): ํต์ ์ฌ ์ฝ๋
- MSIN(Mobile Subscriber Identification Number): ๊ฐ์ ์ ๊ณ ์ ๋ฒํธ
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด IMSI๋ ์ ์ธ๊ณ์ ์ผ๋ก ์ ์ผํ ์๋ณ์๋ก ๊ธฐ๋ฅํฉ๋๋ค .
2. IMSI๊ฐ ๋ณด์ ์ํ์ ๋ ธ์ถ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
์ ํต์ ์ธ 2G, 3G, 4G ๋คํธ์ํฌ์์๋ IMSI๊ฐ ์ํธํ๋์ง ์์ ์ํ๋ก ์ ์ก๋์ด, ํด์ปค๋ค์ด IMSI๋ฅผ ๊ฐ๋ก์ฑ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค. ์ด๋ฅผ ํตํด ํด์ปค๋ค์ ์ฌ์ฉ์์ ์์น๋ฅผ ์ถ์ ํ๊ฑฐ๋ ํต์ ๋ด์ฉ์ ๊ฐ์ฒญํ ์ ์์์ต๋๋ค .
3. IMSI ์ํธํ๋ ๋ฌด์์ธ๊ฐ์?
IMSI ์ํธํ๋ ์ฌ์ฉ์์ IMSI๋ฅผ ์ํธํํ์ฌ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๋ ๊ธฐ์ ๋ก, ํด์ปค๋ค์ด IMSI๋ฅผ ๊ฐ๋ก์ฑ๋๋ผ๋ ์ค์ ์ ๋ณด๋ฅผ ์ ์ ์๋๋ก ํฉ๋๋ค. 5G ๋คํธ์ํฌ์์๋ ์ด๋ฌํ IMSI ์ํธํ๊ฐ ํ์ค์ผ๋ก ์ฑํ๋์ด ๋ณด์์ด ๊ฐํ๋์์ต๋๋ค .
4. IMSI ์ํธํ์ ๋์ ์ผ๋ก ๊ธฐ๋๋๋ ํจ๊ณผ๋ ๋ฌด์์ธ๊ฐ์?
- ์ฌ์ฉ์ ํ๋ผ์ด๋ฒ์ ๋ณดํธ: IMSI๊ฐ ์ํธํ๋๋ฉด ํด์ปค๋ค์ด ์ฌ์ฉ์์ ์์น๋ ์ ์์ ์ถ์ ํ๋ ๊ฒ์ด ์ด๋ ค์์ง๋๋ค.
- ๋ณด์ ๊ฐํ: IMSI ์ํธํ๋ฅผ ํตํด IMSI ์บ์ฒ์ ๊ฐ์ ์ฅ๋น์ ํจ๊ณผ๋ฅผ ๊ฐ์์ํฌ ์ ์์ต๋๋ค.
- ์ ๋ขฐ์ฑ ํฅ์: ์ฌ์ฉ์๋ค์ ๋ณด๋ค ์์ ํ ํต์ ํ๊ฒฝ์์ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
๐ ์๋๋ฆฌ์ค
- ํด๋ผ์ด์ธํธ๋ IMSI๋ฅผ ์๋ฒ๋ก ์ ์ก
- ์๋ฒ๋ IMSI๋ฅผ ๋ฐ์ ์ถ๋ ฅ
- **์ค๊ฐ์(MITM)**๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด๋ฅผ ๊ฐ์ฒญํ์ฌ IMSI๋ฅผ ํ์ทจ
1๏ธโฃ ํด๋ผ์ด์ธํธ (client.py)
import socket
HOST = 'localhost'
PORT = 9000
IMSI = "450081234567890" # ์์ IMSI
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
print(f"[CLIENT] Sending IMSI: {IMSI}")
s.sendall(IMSI.encode())
2๏ธโฃ ์๋ฒ (server.py)
import socket
HOST = 'localhost'
PORT = 9000
with socket.socket(socket.AF\_INET, socket.SOCK\_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"\[SERVER\] Connected by {addr}")
data = conn.recv(1024)
print(f"\[SERVER\] Received IMSI: {data.decode()}")
3๏ธโฃ ์ค๊ฐ์ (sniffer.py)
ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด ํธ๋ํฝ์ ๊ฐ์ฒญํ๋ค๊ณ ๊ฐ์ ํ์ฌ ๋์ผํ ํฌํธ์ ์ฐ๊ฒฐ๋ ํธ๋ํฝ์ ๊ฐ๋ก์ฑ๋ ์ญํ ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค.
import socket
'ํ๋ก์' ํํ๋ก ์ค๊ฐ์ ์์นํ๋ ์ค๋ํผ
SERVER\_HOST = 'localhost'
SERVER\_PORT = 9000
SNIFFER\_PORT = 9999 # ํด๋ผ์ด์ธํธ๋ ์ฌ๊ธฐ์ ์ฐ๊ฒฐํจ
์๋ฒ์ ๋จผ์ ์ฐ๊ฒฐ
server\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)
server\_socket.connect((SERVER\_HOST, SERVER\_PORT))
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ ๋๊ธฐ
sniffer\_socket = socket.socket(socket.AF\_INET, socket.SOCK\_STREAM)
sniffer\_socket.bind((SERVER\_HOST, SNIFFER\_PORT))
sniffer\_socket.listen()
print("\[SNIFFER\] Waiting for client...")
client\_conn, addr = sniffer\_socket.accept()
print(f"\[SNIFFER\] Client connected from {addr}")
data = client\_conn.recv(1024)
print(f"\[SNIFFER\] Intercepted IMSI: {data.decode()}")
์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
server\_socket.sendall(data)
client\_conn.close()
server\_socket.close()
sniffer\_socket.close()
๐ ์คํ ์์
- server.py ์คํ → ์๋ฒ ๋๊ธฐ
- sniffer.py ์คํ → ์ค๊ฐ์ ๋๊ธฐ
- client.py ์์ ํ์ฌ PORT = 9999๋ก ๋ฐ๊พธ๊ณ ์คํ
๐ ๊ตํ
IMSI์ ๊ฐ์ ์ค์ ์ ๋ณด๋ ๋ฐ๋์ ์ํธํ(TLS, HTTPS ๋ฑ) ๋ ์ฑ๋๋ก ์ ์กํด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ ์ค๊ฐ์์ ๋๊ตฌ๋ ๋ด์ฉ์ ๊ฐ๋ก์ฑ๊ณ ํ์ธํ ์ ์์ต๋๋ค.