1 điểm bởi GN⁺ 2024-03-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Trong bối cảnh tranh cãi về việc cấm Flipper Zero ở Canada, bài viết thu tín hiệu RF của key fob ô tô ngoài thực tế rồi phân tích để kiểm tra xem tấn công phát lại đơn thuần có thể đi được đến đâu
  • RTL-SDR có thể nhận dữ liệu I/Q thô trong dải 24~1750MHz để trực quan hóa·lưu trữ·phân tích, còn CC1101 của Flipper Zero có thể phát và thu nhưng cần thiết lập RF chính xác
  • Ở 433.92MHz, mỗi lần bấm nút đều xuất hiện 3 burst ngắn, và hai đỉnh ở hai bên tần số trung tâm được diễn giải là 2-FSK, trong đó 0 và 1 được đặt lên hai tần số khác nhau
  • Khi áp dụng FSK, 50 samples/symbol và giải mã Manchester II trong Universal Radio Hacker, cấu trúc gồm burst dài không có dữ liệu, 3 packet chính và packet cuối ngắn đã lộ ra
  • Trong tín hiệu, có thể nhận diện vùng entropy cao dành cho rolling code, bộ đếm tăng dần, byte lệnh lock/unlock, số thứ tự packet, checksum XOR và syncword, từ đó đi đến kết luận rằng chỉ phát lại đơn thuần thì khó có thể trộm được đa số ô tô

Mục tiêu và bối cảnh thí nghiệm

  • Trong vài năm qua, tác giả đã khám phá các giao thức truyền thông không dây bằng dongle RTL-SDR, và lần này tập trung vào việc key fob ô tô truyền dữ liệu như thế nào cũng như khả năng bị tấn công phát lại
  • Trước đây cũng từng thu tín hiệu key fob, nhưng do hạn chế trong việc tiếp cận ô tô để thử nghiệm nên chưa thể đi tới phân tích có ý nghĩa
  • Thí nghiệm lần này là bước chuẩn bị để đảo ngược và phát lại tín hiệu key fob ngoài thực tế, đi từ các khái niệm RF cơ bản đến quy trình phân tích
  • Khác với việc cấm Flipper Zero ở Canada, bài viết cũng đặt ra vấn đề rằng phần lớn ô tô không dễ bị lấy cắp chỉ bằng tấn công phát lại đơn giản
    • Một trường hợp ngoại lệ liên quan đến Honda là RollingPwn

Phần cứng sử dụng

  • RTL-SDR

    • Có thể biến dongle USB TV/radio mặt đất giá khoảng 10 đô thành bộ thu RF đa năng để kiểm tra và giải mã tín hiệu trong dải 24~1750MHz
    • RTL-SDR mạnh nhờ chip RTL2832U hỗ trợ dùng SDR
    • Nó cho phép bỏ qua phần xử lý tín hiệu vốn thường được thực hiện trong phần cứng, để máy chủ truy cập trực tiếp vào dữ liệu I/Q thô
    • Khi nhận được dữ liệu thô, có thể thu, trực quan hóa, lưu lại rồi tự phân tích mà không cần biết trước các thiết lập cụ thể như kiểu điều chế, băng thông hay tốc độ dữ liệu
  • Flipper Zero và CC1101

    • Phần quan trọng với thí nghiệm này trên Flipper Zero là module Sub-GHz
    • Module này dựa trên chip CC1101 và hỗ trợ các tần số dưới 1GHz thường dùng trong thiết bị không dây tiêu dùng
    • Cũng có thể mua riêng module CC1101 với giá từ 5 đô trở lên để dùng cùng Arduino, Raspberry Pi hoặc bộ chuyển USB-to-TTL
  • Khác biệt giữa CC1101 và RTL2832U

    • CC1101 của Flipper Zero là transceiver, nên có thể vừa phát vừa thu tín hiệu
    • RTL2832U của RTL-SDR có thể thu và phân tích tín hiệu thô, nhưng không thể phát
    • Vì CC1101 không hỗ trợ SDR, nó chỉ trả về dữ liệu đã được xử lý hoàn toàn; để hữu ích thì các thiết lập RF của tín hiệu phát phải khớp chính xác
    • Cũng có các thiết bị SDR vừa phát vừa thu, nhưng giá thường khá cao

Các khái niệm cơ bản để đọc tín hiệu RF

  • Truyền vô tuyến gửi tín hiệu bằng sóng radio, tức sóng điện từ
  • Để tăng độ tin cậy của việc truyền qua không khí, người ta dùng sóng mang có tần số cao hơn tín hiệu gốc cần truyền
  • Tần số là số lần sóng mang xuất hiện trong một giây, và thường được dùng để xác định kênh liên lạc
  • Điều chế là cách biểu diễn dữ liệu trên sóng radio
    • AM biểu diễn dữ liệu bằng thay đổi biên độ
    • FM biểu diễn dữ liệu bằng thay đổi tần số
  • Băng thông là dải tần mà tín hiệu RF đã điều chế chiếm dụng, và có liên quan đến lượng dữ liệu mà tín hiệu có thể mang

Tín hiệu key fob quan sát bằng SDR#

  • Công cụ và tần số

    • SDR# là ứng dụng DSP miễn phí viết bằng C#, hỗ trợ trực quan hóa phổ theo thời gian thực cho SDR và giải điều chế một số kiểu điều chế phổ biến
    • Dongle RTL-SDR được kết nối và sử dụng driver WinUSB thay cho driver DVB-T mặc định
    • Khi dò tới 433.92MHz, có thể thấy hoạt động của các remote ở khoảng cách gần
    • 433.92MHz được giới thiệu là tần số miễn giấy phép tiêu chuẩn tại EU, các nước lân cận và cả nơi tác giả sống là Morocco
  • Mẫu hình quan sát được

    • Mỗi lần bấm nút trên key fob ô tô đều tạo ra 3 burst ngắn liên tiếp
    • Hai đỉnh lớn xuất hiện ở hai bên 433.92MHz, tức trung tâm phổ
    • Sau khi khảo sát các kiểu điều chế phổ biến, hình dạng này trông khớp với 2-FSK
    • Các đỉnh nhỏ trên màn hình được xem là tần số không mong muốn do phần cứng phát giá rẻ và khoảng cách quá gần giữa remote với antenna, nên được bỏ qua
  • Diễn giải 2-FSK

    • FSK là Frequency-Shift Keying, một dạng điều chế tần số mã hóa dữ liệu bằng cách chuyển tần số sóng mang giữa nhiều mức rời rạc
    • Số “2” trong 2-FSK chỉ số lượng kênh dùng để mã hóa
    • Trong trường hợp này, 0 và 1 được mã hóa bằng hai tần số khác nhau, điều này giải thích cho hai đỉnh quan sát được

Trích xuất bit và byte bằng Universal Radio Hacker

  • Phân tích bằng URH

    • Universal Radio Hacker là bộ công cụ mã nguồn mở để nghiên cứu giao thức vô tuyến, hỗ trợ sẵn nhiều loại SDR
    • URH cung cấp khả năng giải điều chế tín hiệu và tự động phát hiện tham số điều chế để nhận diện các bit và byte đang bay trong không trung
    • Ban đầu tác giả không tìm được đúng tham số nên kết quả cho ra bị sai
    • Khi ghi nhiều tín hiệu lặp lại cùng lúc, tỷ lệ tự phát hiện thành công tăng lên, và trong trường hợp này thiết lập đúng là 50 samples/symbol, FSK
  • Cấu trúc burst và giải mã Manchester

    • Khi phóng to tín hiệu, lại thấy rõ 3 burst như đã quan sát trong SDR#
    • Burst thứ hai lại gồm 3 phần tách biệt, nên tổng cộng có 5 section để phân tích
    • Sau khi tự động trích xuất chuỗi bit từ từng section và chuyển sang hệ hexa, có thể thấy mẫu lặp lại, nhưng do cùng 5 số hexa lặp lại và nhiều byte 0x55 nên cần xử lý thêm
    • Sau khi thử nhiều thuật toán giải mã trong tab Analysis của URH, Manchester II là lựa chọn biến các byte 0x55 thành null mà không tạo lỗi giải mã
  • Vai trò của mã hóa Manchester

    • Manchester là một phương thức điều chế số đơn giản giúp tín hiệu không ở quá lâu trong trạng thái logic low hoặc high
    • Nó biến tín hiệu dữ liệu thành tín hiệu kết hợp giữa dữ liệu và đồng bộ hóa, hữu ích cho clock recovery
    • Vì môi trường tương tự dễ bị nhiễu và can thiệp, đặc tính này rất hữu ích khi truyền dữ liệu số
    • Trong Manchester, dữ liệu nhị phân được mã hóa thành hai bit đối nghịch nhau
    • Ví dụ: 0 thành 01, còn 1 thành 10, hoặc ngược lại tùy quy ước

Cấu trúc packet và suy đoán rolling code

  • Cấu trúc xuất hiện ở mỗi lần bấm nút

    • Sau khi so sánh thủ công nhiều bản thu, tác giả thấy mỗi lần bấm nút đều có một cấu trúc nhất quán
    • Có 1 burst dài không mang dữ liệu, khi giải mã ra thành 100 byte null
    • Có 3 burst rất giống nhau nhưng 2 byte thay đổi một phần
    • Tiếp theo là 1 burst cuối cùng khá giống 3 burst trước nhưng ngắn hơn
    • Ba burst ở giữa được xem là packet chính và được phân tích kỹ hơn
    • Một ID tăng dần, có vẻ tăng thêm 1 với mỗi tín hiệu mới, đã được phát hiện
  • Cơ chế rolling code

    • Rolling code được dùng trong hệ thống keyless entry để ngăn tấn công phát lại đơn giản
    • Nó ngăn kẻ tấn công ghi lại một lần truyền rồi phát lại sau đó để buộc bộ nhận mở khóa
    • Ô tô và remote cùng thống nhất một thuật toán an toàn về mặt mật mã để tạo ra rolling code dùng cho xác thực
    • Khóa được tạo và theo dõi bằng một bộ đếm, và bộ đếm của remote với ô tô phải duy trì trạng thái đồng bộ
    • Cửa sổ hợp lệ giúp remote không bị mất đồng bộ ngay cả khi ô tô không nhận được tín hiệu
    • Trong nhiều cách triển khai, hệ thống cho phép tối đa 255 lần bấm ngoài phạm vi; sau đó phải đồng bộ lại remote thủ công
  • Nhận diện các trường tín hiệu

    • Vì rolling code an toàn về mặt mật mã, nên phần có entropy cao nhất trong tín hiệu được nhận diện là vùng liên quan đến cách triển khai này
    • ID tăng dần đã tìm thấy trước đó được suy đoán là bộ đếm của hệ rolling code
    • Khi so sánh tín hiệu lock và unlock, có thể nhận diện byte biểu thị lệnh
    • 8 = unlock
    • 4 = lock

Số thứ tự, checksum và syncword

  • Giá trị có vẻ là số thứ tự packet

    • Một trong các vùng biến thiên còn lại xuất hiện lặp lại cùng những giá trị giống nhau ở các tín hiệu đã thu khác
    • Khi nhìn 3 giá trị này dưới dạng nhị phân, các bit cao tăng dần như một số thứ tự
    • 0x6: 0110
    • 0xA: 1010
    • 0xE: 1110
    • Nếu tính cả packet cuối thứ 4 thì 0x13: 10011, khá khớp với cách diễn giải rằng trường này chứa số thứ tự packet
    • Sự thay đổi ở bit thấp nhất không được tính vào nhận định này
  • Checksum XOR

    • Byte cuối thay đổi theo từng packet và cũng thay đổi như ngẫu nhiên giữa các tín hiệu tổng thể
    • Vì nằm ở cuối packet và biến đổi không đều, nó có khả năng là checksum
    • Khi XOR byte này với byte số thứ tự đã phân tích ở trên, kết quả ở từng ví dụ đều cho ra một giá trị cố định
    • Ví dụ 1:
      • 0x06 ^ 0xB9 = 0xBF
      • 0x0A ^ 0xB5 = 0xBF
      • 0x0E ^ 0xB1 = 0xBF
    • Ví dụ 2:
      • 0x06 ^ 0xCC = 0xCA
      • 0x0A ^ 0xC0 = 0xCA
      • 0x0E ^ 0xC4 = 0xCA
    • Nếu áp dụng XOR cho mọi byte trong packet thì giá trị luôn lệch đúng 1, nên nhiều khả năng 2 byte đầu đã bị loại khỏi checksum
    • Hai byte đầu được diễn giải là syncword, dùng để đồng bộ bộ nhận và đánh dấu điểm bắt đầu dữ liệu

Cấu thành tín hiệu cuối cùng và bước tiếp theo

  • Burst dài ban đầu có vai trò đánh thức bộ thu radio đang ở chế độ tiết kiệm điện khi nhàn rỗi để nó sẵn sàng nhận dữ liệu
  • Lý do remote gửi 3 packet gần như chứa cùng một dữ liệu là để tăng độ tin cậy, phòng trường hợp một lần truyền bị hỏng
  • Sau khi gắn nhãn cuối cùng, tín hiệu key fob ô tô được diễn giải là gồm syncword, vùng liên quan đến rolling code, bộ đếm, byte lệnh, số thứ tự packet, checksum XOR và các phần khác
  • Bước tiếp theo là tích hợp định dạng tín hiệu này vào Flipper Zero để hỗ trợ đọc, tái tuần tự hóa và phát lại
  • Nếu có thông tin chưa chính xác hoặc còn chỗ cần cải thiện, có thể gửi pull request trên GitHub

1 bình luận

 
GN⁺ 2024-03-15
Ý kiến trên Hacker News
  • Tôi từng phải reverse engineering một remote chìa khóa ô tô giá rẻ mua trên AliExpress cho một dự án điện tử, và chỉ với oscilloscope cùng Wikipedia, nếu kiên trì đủ lâu thì vẫn làm được
    Lần tới tôi định thử dùng phương pháp trong bài blog này và trở thành một hacker giỏi hơn

  • Cũng có một flow graph GNU Radio cho mục đích tương tự: https://github.com/bastibl/gr-keyfob
    Slide thuyết trình: https://www.fleark.de/keyfob.pdf

  • Nếu remote và ô tô tạo/ghi theo dõi khóa bằng một bộ đếm giữa hai bên để giữ đồng bộ, tôi luôn tò mò remote học lệnh vượt qua chuyện này như thế nào
    Xe tôi có vài nút cửa gara tích hợp sẵn, và hình như tôi đã thiết lập bằng cách đặt xe vào chế độ học rồi bấm nút trên remote cửa gara. Tôi tự hỏi liệu đó có phải là tính năng phức tạp hơn nhiều so với phát lại đơn thuần: giải mã tín hiệu, nhận diện loại rồi bắt đầu ghép đôi với bộ mở cửa hay không

    • Nghe giống HomeLink, và thực tế đúng là nó hoạt động phức tạp hơn
      Theo tôi hiểu, họ hợp tác với nhiều công ty để hỗ trợ cả mã cố định lẫn rolling code, và cho phép ghép đôi với cửa gara tương ứng. Chamberlain[0], nhà sản xuất cửa gara lớn nhất ở Mỹ, sở hữu nhiều thương hiệu và dùng thuật toán rolling code đã biết có thể giải mã[1]
      [0] https://www.chamberlain.com/
      [1] https://github.com/argilo/secplus
    • Theo tôi hiểu, phần lớn bộ mở cửa gara không dùng rolling key mà gửi cùng một mã mỗi lần
    • Hướng thì ngược lại. Bên học là bộ mở cửa gara chính, còn nút trên ô tô chỉ phát tín hiệu
      Quy trình này giống như báo với bộ mở cửa rằng “nghe thấy cái remote mới này không? cho nó mở cửa luôn nhé”. Các nút trên ô tô có vẻ luân phiên qua vài giao thức phổ biến, và trên thực tế ở Mỹ những loại được dùng rộng rãi có lẽ chỉ khoảng 4–5 dòng như Chamberlain/Liftmaster hoặc Genie
    • Trong hệ thống mã cố định, remote gửi cùng một tín hiệu mỗi lần, thường đặt tín hiệu cố định khác với hàng xóm bằng cách nào đó như công tắc DIP trên remote và bộ chính
      Remote học lệnh cho hệ thống kiểu này có thể hoạt động chỉ bằng cách phát lại nguyên tín hiệu đã ghi, nhưng nếu trong lúc ghi có lẫn tín hiệu khác cùng băng tần, chẳng hạn chuông cửa không dây, thì nó cũng có thể phát lại cả thứ không mong muốn. Vì vậy ít nhất cần xử lý cắt đúng phần tín hiệu cửa thật; tốt hơn nữa là giải mã tín hiệu để biết mã rồi mỗi lần tạo ra một tín hiệu mới sạch
      Gần như tất cả các hãng bộ mở cửa gara gia dụng ở Mỹ đã chuyển mẫu mới sang rolling code trong thập niên 1990, nên nếu thiết bị được lắp trong khoảng 25 năm trở lại đây thì gần như chắc chắn dùng rolling code. Thông thường remote tạo một chuỗi giả ngẫu nhiên có seed, mỗi lần bấm gửi giá trị kế tiếp, còn bộ chính ở chế độ học sẽ quan sát vài giá trị liên tiếp để suy ra seed đó và thêm vào danh sách remote
      Khi vận hành, bộ chính giải mã giá trị trong chuỗi nhận được, kiểm tra xem nó có nằm trong khoảng dự kiến của một remote đã biết hay không; nếu đúng thì mở cửa và cập nhật vị trí của remote đó. Nó cũng chừa một khoảng dung sai để trẻ con có bấm nút nhiều lần trên đường đi thì về nhà vẫn không bị không mở được cửa
      Về nguyên lý, remote học lệnh sao chép một remote rolling code hiện có cũng có thể làm được, nhưng từ góc nhìn của bộ chính, bản sao và bản gốc là cùng một remote. Nếu một trong hai lâu không dùng trong khi bên kia đẩy chuỗi ra ngoài khoảng dung sai, một bên có thể ngừng hoạt động, và việc ghép đôi lại cũng có thể rối tùy chi tiết triển khai của hệ thống
      Những remote phổ thông cho rolling code mà tôi từng thấy thực tế không học từ remote cũ, mà là cho remote biết loại bộ chính rồi ghép đôi mới với bộ chính như remote của nhà sản xuất. Giao diện người dùng nghèo nàn nên rất có thể là kiểu tra số trong bảng hướng dẫn, bấm một nút ẩn, rồi bấm nút cần lập trình đúng số lần đó
      Sẽ rất hay nếu nhìn tín hiệu remote hiện có rồi tự động xác định đó là hệ thống rolling code nào, nhưng như vậy cần bộ thu, mà ngoài mục đích đó gần như không dùng vào việc gì khác nên khó biện minh. Ghép đôi và lệnh mở/đóng cửa gara về cơ bản là một chiều từ remote tới bộ chính
  • Tác giả đã giải mã hết, nhưng thực ra chưa mở được cửa xe. Vẫn còn phải phá rolling code, và không thể chỉ cộng thêm 1 rồi gửi lại
    Nhìn từ bên ngoài, rolling code tiếp theo phải trông như ngẫu nhiên

    • Vì thế ngay đầu bài có viết “không dễ bị tổn thương như bạn nghĩ”
    • Vấn đề then chốt là brute force có khó hay không. Nếu khó, thì dù có thể sniff, bạn vẫn không mở được xe nếu không ghi lại trước một lần bấm nút thật
  • Tôi mong các hãng xe bắt đầu làm một loại rất nhỏ, có thể bỏ vào ví, có lẽ là remote RFID
    Hoặc tôi kỳ vọng một thiết bị nhỏ cỡ thẻ tín dụng, kiểu giống Flipper, làm được việc tương tự. Nói nghiêm túc, chìa khóa ô tô là món đồ lớn thứ hai trong túi tôi sau điện thoại, và ít nhất xét theo độ dày thì khá vướng

    • Thứ bạn muốn rốt cuộc có vẻ là điện thoại trở thành chìa khóa ô tô
    • Các xe điện BYD mới có kèm một khóa NFC cỡ thẻ tín dụng có thể mở xe và khởi động
  • Lâu rồi mới đọc được một bài tôi hiểu, nên thấy thật mới mẻ

  • Khi việc tiếp cận thiết bị lập trình khóa trở nên dễ hơn, xu hướng đưa quyền lập trình khóa vào sau một lớp “bảo mật” mạnh hơn khá thú vị
    Nhà sản xuất quyết định cái gì là một phần của hệ thống “bảo mật”, và phạm vi đó có thể mở rộng không chỉ tới chìa khóa mà còn rất nhiều module. Việc này có hiệu quả với những tội phạm vốn nổi tiếng là tuân thủ quy tắc hay không thì còn gây tranh cãi (/s), nhưng chắc chắn ảnh hưởng tới một số doanh nghiệp
    Nếu có tiền án, bạn có thể bị cấm tham gia. Sau khi mãn hạn tù, khởi nghiệp tự doanh và thành công là một trong những con đường quan trọng đối với người từng phạm tội, nhưng trong cơ chế này thì có thể trở nên bế tắc
    https://wp.nastf.org/?page_id=367
    https://wp.nastf.org/wp-content/uploads/2023/07/ApplicationC...

  • Có nhất thiết phải chặn tín hiệu, giải mã rồi mã hóa lại không? Chỉ cần dùng ăng-ten lớn để tấn công trung gian giữa remote chìa khóa và xe, khiến hai bên tin rằng chúng ở gần nhau hơn là được

    • Thật ngạc nhiên là passive keyless entry lại phổ biến đến vậy. Đây là thiết kế ưu tiên ngoại hình và tiện lợi hơn tính năng bảo mật
    • Có lẽ nó ở dải gigahertz; tôi tò mò loại ăng-ten cấp tiêu dùng nào có thể chuyển tiếp hoặc khuếch đại tín hiệu của remote chìa khóa mà không tạo ra tỷ số tín hiệu trên nhiễu quá cao đến mức xe phát hiện
  • Ngày nay chỉ cần vào được trong xe là có thể dùng công cụ OBD để lập trình chìa khóa mới rồi lái đi luôn, nên chuyện này thú vị hơn nhiều và cũng mất an toàn nghiêm trọng hơn

  • Flipper mặc định cũng có thể thu tín hiệu thô

    • https://www.ti.com/lit/ds/symlink/cc1101.pdf
      Có lẽ có thể khiến nó xuất dữ liệu FSK hoặc OOK thô đã giải điều chế mà không xử lý thêm, nhưng việc lấy được mẫu IQ thô thì thật sự đáng nghi