TigerPuma
tradahacking
Published in
7 min readOct 2, 2017

--

Điện thoại trung quốc có thực sự rẻ ???? (Phần 2)

Như ở phần trước mình đã mô tả các bước tiếp cận để có thể lấy được firmware của 1 chiếc điện thoại Iphone Trung Quốc (ai chưa đọc có thể xem tại đây), phần 2 này mình sẽ hồi ký tiếp phần phân tích và những phát hiện khá shock về dòng điện thoại này (Phần này mình hầu như lót dép hóng nên phần mô tả kỹ thuật sẽ không chi tiết như trước, tuy nhiên sẽ vẫn có những kinh nghiệm nho nhỏ đặc thù riêng của reverse thiết bị nhúng).

Map address

Từ bảng địa chỉ lấy được từ binwalk chúng ta sẽ load lần được các phân vùng code lên IDA, tuy nhiên đây chỉ có các phân vùng code, ngoài ra còn có các vùng RAM ( và địa chỉ của các register của module ngoại vi: timer, gsm, gpio, lcd …). Để tìm ra địa chỉ các vùng RAM có thể tra datasheet, hay tham khảo “helloworld” hoặc tra google :v.

Sau khi có địa chỉ chúng ta sẽ tạo các segment trên IDA như sau (ở đây mình không map riêng vùng peripheral bởi vì số lượng các khối ngoại vi rất nhiều, khi dịch ngược sử dụng đến module nào mình sẽ tra trực tiếp datasheet và tạo biến mang tên thanh ghi của module chức năng đó).

Map symbol

Do firmware khi nạp xuống đã bị strip đi toàn bộ các phân vùng symbol, do đó khi load lên IDA sẽ chỉ toàn sub_xxxx mà thôi, điều này khiến cho việc dịch ngược cục firm khoảng gần 10Mb trở nên tương đối khó khăn, điều này cũng sẽ thường xuyên gặp với các thiết bị nhúng, đặc biết là các thiết bị không sử dụng MMU.

Có 2 tool có thể làm việc reverse trở nên đơn giản hơn: bindiffrizzo, tuy nhiên bắt buộc bạn phải build được helloworld như bài trước và sử dụng càng nhiều hàm trong thư viện trên helloworld càng tốt.

Làm theo hướng dẫn của các tool compare giữa file mẫu helloworld và firmware ta sẽ có:

Đây cũng chính là cách mà mình tìm ra vị trị hàm trong ROM_GHF ở bài viết trước để insert code đọc vùng dữ liệu encode ra.

Tuy nhiên đừng vội mừng, trick này cũng không phải là tuyệt đối để bạn có thể vểnh râu ngồi đọc binary như đọc code C được đâu bởi vì:

- Tool rất hay nhận sai với các hàm nhỏ ít intruction (có thể compare 100% giống nhau nhưng thực tế lại chẳng liên quan gì đến nhau vì nó là hàm wraper cho 2 hàm khác nhau trong thư viện).

- Các hàm thực sự mà “đối thủ” phía bên kia code cũng không thể nhận ra vì đương nhiên nó chẳng nằm trong lib nào để mà compare cả.

Trên đây là toàn bộ những gì mình chia sẻ về kỹ thuật, còn khi dịch ngược, sẽ tùy mục đích bạn tìm bug để khai thác hay tìm kiếm backdoor sẽ có những chiến thuật khác nhau, ngoài ra còn phụ thuộc nhiều vào kinh nghiệm của chính bản thân bạn nữa. Nếu ai chỉ muốn tìm hiểu về kỹ thuật tiếp cận thiết bị nhúng thì có thể dừng tại đây.

Mục đích lần này của mình là trả lời cho câu hỏi: “Điện thoại Trung quốc liệu có thực sự rẻ ???” do đó mình chọn cách tiếp cận theo hướng tìm backdoor dấu trong firmware.

Và câu trả lời là không. Đương nhiên các bạn đã đoán được từ đầu, nhưng tại sao lại không?

Liệu có bao giờ chúng ta nghĩ rằng mua 1 chiêc iphone chỉ khoảng hơn triệu đồng nhưng thực tế đang phải trả lãi hàng tháng vài trục đến vài trăm nghìn, điều đó hoàn toàn có thể xảy ra bởi vì rất nhiều mẫu điễn thoại trên thị trường đã bị gắn sẵn backdoor.

Cụ thể backdoor như thế nào?

Với chiếc điện thoại iphone Trung quốc, backdoor bao gồm 04 luồng hoạt động chính:

1. Timer “services”: Định kỳ gọi điện theo cấu hình

- Định kỳ 120 giây (2 phút) thực hiện kiểm tra và gọi điện

- Nếu chưa lấy được IMSI: Thực hiện lấy IMSI

- Nếu đã lấy được IMSI và thỏa mãn điều kiện sau, thực hiện gọi:

o Máy đang idle

o Số gọi đi khác “NULL” và “0”

o Số ngày đã đợi >= tần suất

o Thời gian (giờ, phút) hiện tại >= Thời gian cấu hình (chỉ gọi điện sau a giờ b phút hàng ngày)

- Thời lượng cuộc gọi là ngẫu nhiên giữa cấu hình min và max

2. Timer “wap”: Định kỳ request lên C&C nhận cấu hình gọi điện

- Định kỳ 43200 giây (12 giờ) request đến C&C nhận lệnh:

o URL: m.w-chen.com/gjservices.php?imsi=%s&resource=%s

o imsi: IMSI của SIM

o resource: ID của máy (trong trường hợp iPhone là MTK11BW1224RT50NEW)

- Dữ liệu trả về có dạng:
<html><head><body><div style=”display:none”>###+265881064634–3–115–117###</div></body></head></html>

o +265881064634: Đầu số quốc tế

o 3: Tần suất gọi (ngày/cuộc)

o 115: Thời lượng gọi min (giây)

o 117: Thời lượng gọi max (giây)

3. Timer “imsi”: Lấy IMSI của SIM

- Chạy 1 lần khi khởi động máy, lấy IMSI của SIM1, nếu không được thì lấy SIM2

4. Timer “services_freq”: Kiểm tra số ngày đợi theo tần suất gọi

- Định kỳ 3600 giây (1 giờ) chạy 1 lần

- Vào giờ “18” hàng ngày, tang biến g_irday (biến cho biết số ngày đã đợi, nếu đủ tần suất sẽ thực hiện gọi điện).

Mục đích của backdoor là gì?

Với cuộc gọi quốc tế có giá cước lên đến hàng chục nghìn 1 phút, bạn có thể sẽ bị hút máu một cách cực kỳ khủng khiếp và ai sẽ được lợi ở đây ???

Chắc hẳn các bạn đều đã từng nghe qua các dịch vụ giá trị gia tăng như: Kể chuyện đêm khuya, nghe nhạc theo yêu cầu, tổng đài nhắn tin dự đoán tỷ số bóng đá, tổng đài xố số, chơi gamek, lô đề… Khi bạn nhắn tin hoặc gọi điện đến các tổng đài này thì bạn sẽ bị trừ tiền tùy theo phí dịch vụ mà tổng đài quy định, nhiều đầu số chỉ cần nhắn tin 1 lần đăng ký và bị trừ tiền hàng tháng. Các đầu số trên backdoor cũng hoạt động theo nguyên tắc giống như vậy.

Với việc quản lý không đủ chặt về các nhà cung cấp dịch vụ nội dung di động (Content Service Provider — SP) như hiện nay, số lượng SP mọc lên như nấm sau mưa với đủ các thể loại dịch vụ. Và đương nhiên khi quản lý không chặt cùng các chế tài xử phạt không đủ sức răn đe thì sẽ xuất hiện rất nhiều tiêu cực, điển hình như gần đây nhất vụ SAM media chỉ bị phạt 55 triệu trong khi thu lời về 230 tỷ ??!!!

Tìm hiểu thêm 1 chút thì mình phát hiện ra thực tế dịch vụ này khá phổ biến tại Trung Quốc, có trang web và banner công khai luôn như ảnh bên dưới đây:

(1) Service Provider đăng ký dịch vụ VAS, báo với Skylin (Công ty cung cấp thiết bị có backdoor)

(2) Skylin build app vào các handset Trung Quốc, xuất bán cho các nhà cung cấp handset

(3) Handset được bán cho người dùng

(4) Người dung lắp SIM, nạp tiền, handset tự động đăng ký dịch vụ

(5) Telco thu tiền người dùng trả cho Service Provider, Service Provider share lợi nhuận với Skylin

Sau phát hiện này, chợt nhớ ra bà cụ ở nhà cũng đang dùng 1 em cục gạch, lại cũng hay kêu vừa nạp tiền được mấy hôm không gọi đi đâu mấy mà đã hết, chột dạ lôi ra kiểm tra thì cũng bị y như em iphone bên trên. Chỉ có khác là không chỉ có 1 loại mã độc mà còn có nhiều loại mã độc trên cùng 1 thiết bị. Các mã độc này đều có C&C riêng và nhận lệnh điều khiển gọi điện hoặc gửi tin nhắn khi có yêu cầu một cách độc lập.

Kết Luận:

Còn chờ gì nữa, hãy kiểm tra lại chính chiếc điện thoại của bạn nếu có thể, giặc ngay bên cạnh bạn đó.

--

--