1 điểm bởi GN⁺ 2 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Khoảng 30 tệp Web UI quản trị trong firmware camera Hanwha Vision chứa cùng một token GitHub, và token này có quyền quản trị đối với hàng trăm repository trong tổ chức
  • fwupgrader trong firmware khôi phục khóa AES được hard-code bằng cách XOR với một bảng tĩnh rồi dùng openssl để giải mã hệ thống tệp gốc; khóa và IV được dùng chung trong cùng dòng model
  • Do biến build của Vite được đặt thành toàn bộ process.env, các biến môi trường của job CI đã bị ghi vào artifact, và GITHUB_NPM_TOKEN cùng nhiều cấu hình nội bộ cũng bị đưa vào firmware camera
  • Khảo sát khoảng 500 firmware theo cùng cách và trích xuất được 62%; 3 firmware có phát hiện token GitHub đều chứa cùng một token
  • Hanwha đã thu hồi token trong vòng 12 giờ sau khi nhận báo cáo, nhưng cấu hình chèn toàn bộ môi trường CI vào artifact phía client có thể làm lộ thông tin xác thực và hạ tầng nội bộ trong sản phẩm

Thu thập firmware và lớp mã hóa đầu tiên

  • Website Hanwha Vision công khai image firmware theo từng model camera, nên có thể tải tệp về để phân tích
  • Khi kiểm tra image bằng binwalk, phát hiện một tarball riêng chứa các thành phần AI cho camera và một fwimage.tgz đã được mã hóa
  • Theo phân tích giải mã firmware Hanwha của Matt Brown, mật khẩu được tạo bằng cách kết hợp HTW với số model
    • Trong đối tượng phân tích, HTWXNP-9300RW hoạt động
  • Bên trong tarball đã giải nén có thêm một fwimage.tgz khác được mã hóa theo cách khác, nên không thể tái sử dụng nguyên quy trình giải mã cũ

Khôi phục phương thức giải mã từ fwupgrader

  • Phân tích binary fwupgrader có trong tarball bên ngoài bằng Ghidra và Claude Code để trích xuất hệ thống tệp gốc thực sự
  • fwupgrader có áp dụng obfuscation để che giấu phương thức giải mã
    • Khóa AES được XOR với một bảng khóa tĩnh nhỏ bên trong binary rồi được lắp ráp lại khi chạy
    • IV nằm trong binary dưới dạng plaintext
    • Các mảnh lệnh openssl cũng được obfuscate bằng XOR theo cách tương tự
  • Lệnh được khôi phục có dạng sau, sử dụng SHA-256 và AES-256-CBC
    openssl enc -md sha256 -aes-256-cbc -d \\  
      -K <KEY> -iv <IV> -in <INPUT> -out <OUTPUT>  
    
  • Khóa và IV được hard-code và dùng chung trong cùng dòng model
    KEY = dfa049bb922e63e2decc764af5628068e5b7a2662e479a615b14643e567579b0  
    IV  = 53f926801b81454a4f889c9a390db6e6  
    

Token quản trị GitHub nằm trong firmware

  • Khi kiểm tra hệ thống tệp gốc đã trích xuất bằng trufflehog, cùng một token GitHub được phát hiện lặp lại trong khoảng 30 tệp
  • Token này có quyền quản trị đối với hàng trăm repository thuộc tổ chức GitHub của Hanwha
  • UI camera được build bằng Vite, và xác nhận rằng một biến build được đặt thành toàn bộ process.env, khiến toàn bộ môi trường của job CI bị ghi vào các tệp kết quả
    var W = {  
      DATAPORT: "9090",  
      GIT_LFS_SKIP_SMUDGE: "1",  
      npm_command: "run-script",  
      KUBERNETES_SERVICE_PORT_HTTPS: "443",  
      GITHUB_NPM_TOKEN: "<snip>:ghp_…REDACTED…",  
      npm_config_userconfig: "/home/docker/.npmrc",  
      // etc  
    }  
    
  • Do không có camera thực tế, chưa thể xác minh liệu nó có hoạt động hay không
    • Có khả năng token đã được truyền qua mạng tới người dùng truy cập UI quản trị
    • Cũng vẫn có khả năng tệp chỉ tồn tại trên đĩa và không thực sự được phục vụ

Địa chỉ DoD trong môi trường CI

  • Các biến môi trường bị lộ cũng chứa địa chỉ IP được cấp cho Bộ Quốc phòng Mỹ
  • Chưa xác nhận được liệu các địa chỉ này được dùng tùy ý cho dịch vụ nội bộ không giao tiếp với bên ngoài, hay bắt nguồn từ quan hệ giữa Hanwha và Bộ Quốc phòng Mỹ
  • Hanwha Vision là công ty giám sát video được thành lập với tên Samsung Techwin và là công ty con của Hanwha Group
    • Các sản phẩm trước đây bao gồm pháo tự hành K9 Thunder, xe bọc thép chở đạn K10, các hệ thống con của K2 Black Panther, và robot canh gác SGR-A1
    • SGR-A1 là robot canh gác có vũ trang
  • Có thể CI do tổ chức trung tâm của Hanwha cung cấp và các biến liên quan được chia sẻ theo nhu cầu của công ty liên kết Hanwha Aerospace hoặc Hanwha Defense USA, nhưng đây là suy đoán chưa được xác nhận

Khảo sát toàn bộ firmware

  • Để kiểm tra đây có phải một trường hợp đơn lẻ tình cờ hay còn có các token khác, firmware camera có thể tải từ website Hanwha đã được thu thập
  • Trong khoảng 600 camera, thu thập được khoảng 500 firmware cho các model có cung cấp firmware
  • Có thể trích xuất 62% bằng cùng phương pháp; chưa xác định được lý do phần còn lại thất bại
  • Có 3 firmware chứa token GitHub, và tất cả đều chứa cùng một token

Báo cáo và phản hồi

  • Thông tin tối thiểu đủ để xác định vị trí token đã được gửi tới email báo cáo bảo mật công khai của Hanwha
  • Hanwha đã phản hồi trong vòng 12 giờ sau khi nhận báo cáo và thu hồi token đó
  • Việc token GitHub bị đưa vào firmware là sai sót, nhưng quá trình tiếp nhận báo cáo và xử lý diễn ra rất nhanh

1 bình luận

 
Ý kiến trên Hacker News
  • Đang tìm camera IP white-label hoặc sản phẩm gần như plug-and-play được nhà sản xuất hỗ trợ nhưng vẫn có thể gỡ rootfs khi cần
    Trước đây chỉ có các bộ kit phát triển đắt tiền thậm chí không có cả vỏ, nhưng giờ dường như đã có lựa chọn như GoodCam

    • Dù không phải firmware mở, nếu dùng ONVIF trên mạng cô lập thì cũng khá gần với mục tiêu đó
      Camera ONVIF tương thích với hầu hết các đầu ghi hình mạng (NVR), và cũng có nhiều NVR mã nguồn mở
      Nếu không để camera PoE giá rẻ lộ ra ngoài Internet thì bảo mật của firmware nhà sản xuất bớt quan trọng hơn, nhưng VLAN và tách mạng phải được cấu hình thật cẩn thận
    • Để giải quyết vấn đề này, tôi đã tạo Wyrecam, hỗ trợ Ingenic T31 của Wyze v3
      Độ ổn định tương tự Apple HomeKit, tức là không mấy xuất sắc
    • Thingino có danh sách camera được hỗ trợ rõ ràng, và nếu là mẫu hỗ trợ flash bằng thẻ SD thì cài đặt cũng đơn giản
      Tôi đã nâng cấp hai chiếc Sonoff Slim Gen2 mà không gặp vấn đề gì
    • Một số camera có thể thay firmware gốc bằng Thingino, và danh sách phần cứng được OpenIPC hỗ trợ cũng đáng tham khảo
    • Trang cửa hàng dường như không hoạt động, báo lỗi Stránka nenalezena, There's been a glitch...
  • Việc firmware nhúng sẵn địa chỉ IP của Bộ Quốc phòng Mỹ có vẻ là vấn đề lớn hơn, và khiến tôi thấy nên tránh các sản phẩm bảo mật của Hàn Quốc

    • Một số công ty blackhole toàn bộ dải IP của Bộ Quốc phòng Mỹ và dùng làm địa chỉ nội bộ, nên có thể là trường hợp như vậy, nhưng dù sao vẫn rất kỳ lạ
    • Hải quân Canada gần đây cũng có vẻ đã đưa ra quyết định tương tự trong một dự án lớn: kết quả tìm kiếm
    • Bộ Quốc phòng Mỹ sở hữu không gian địa chỉ IP cực kỳ lớn, nên khả năng vô tình trùng cũng hoàn toàn có thể xảy ra
    • Sản phẩm IoT của Hàn Quốc cũng vậy; các sản phẩm tôi từng trực tiếp xử lý có cách làm bảo mật ở mức vô lý
    • Sản phẩm trong nước mình cũng thường lộn xộn vì lỗ hổng bảo mật và kỹ thuật cẩu thả
  • Nhiều nhà cung cấp dùng mặc định nguy hiểm, bảo mật hỏng, và các giá trị hard-code
    Dù không đặt bảo mật lên hàng đầu, ít nhất cũng cần các kiểm tra cơ bản như kiểm tra thông tin xác thực hard-code

    • Việc bảo mật không phải ưu tiên đối với camera an ninh tự nó đã là một nghịch lý
    • Với cách vận hành giao việc cho nhân sự ít kinh nghiệm nhất và rẻ nhất, khó mà kỳ vọng ngay cả kiểm tra tiêu chuẩn tối thiểu
    • Ngày nay chỉ cần thêm chức năng kiểm tra bảo mật cơ bản vào repository là được, nên gần như không còn lý do bào chữa
  • Biện pháp tối thiểu là đặt camera vào VLAN riêng và chặn hoàn toàn truy cập Internet của VLAN đó

  • Trước đây tôi từng kiểm tra và thấy nhiều dongle OBD-II được xuất xưởng với cùng một địa chỉ MAC, kết quả là có thể truy cập toàn bộ thông tin trên nhiều website
    Những vấn đề kiểu này dù muốn tránh cũng sẽ tiếp tục xảy ra

    • Tôi tò mò làm sao cùng một địa chỉ MAC lại dẫn tới toàn quyền truy cập
      Nếu website dùng địa chỉ MAC do client cung cấp làm phương thức xác thực thì đó là thất bại IoT điển hình
  • Có lẽ nên bỏ chữ an ninh khỏi tên sản phẩm và chỉ gọi là camera thôi

  • Điều gây khó chịu là blog này dùng sai biểu tượng liên kết ngoài

    • Selector a[href*="://"]::after giả định liên kết nội bộ là đường dẫn tương đối như href="/about", nhưng site này dùng URL tuyệt đối như [https://hhh.hn/about](https://hhh.hn/about) ngay cả cho liên kết điều hướng, nên mọi liên kết đều bị gắn biểu tượng
      Có thể sửa bằng cách loại trừ các liên kết bắt đầu bằng địa chỉ site: a[href*="://"]:not([href^="https://hhh.hn";])::after
  • Đèn trang trí trong nhà tôi mua gần đây không thể điều khiển nếu không có app riêng
    Tôi lấy APK từ Google Store về phân tích thì thấy API key cho backend, Shopify, v.v. gần như nằm nguyên trong đó, nhưng vẫn chưa dùng chúng để làm gì

    • Public key thường không cấp quyền truy cập đặc biệt nào
      Nếu là nhà phát triển quan tâm đến bảo mật, họ sẽ dùng App Attest hoặc chức năng tương đương của Google Store
    • Tôi không nghĩ ra lý do hợp lý nào để app đèn cần quyền truy cập API Shopify
      Tuy nhiên, từ kinh nghiệm tư vấn cho cửa hàng Shopify, chất lượng code do các consultant hoặc designer giá rẻ cung cấp thường rất thảm, nên cũng không ngạc nhiên
    • Dù không phải lúc nào cũng tối ưu về ngoại hình, an toàn hơn là chỉ mua thiết bị thông minh có thể điều khiển cục bộ như Zigbee hoặc Z-Wave
    • Công khai thông tin như vậy có thể nguy hiểm vì nhà cung cấp có thể phản ứng pháp lý
      Từng có một công ty bảo vệ nhà nghiên cứu khỏi hậu quả pháp lý, nhưng tôi không nhớ tên
    • Dù không có app riêng thì cuối cùng vẫn điều khiển được, nên hy vọng bạn reverse-engineer giao thức và công bố cách làm
  • Vì LLM, làm rối mã nguồn trên thực tế đã bị vô hiệu hóa
    Obfuscation vốn chỉ cản trở bằng cách khiến công việc trở nên nhàm chán, còn AI thì không bận tâm đến công sức đó

    • Obfuscation chỉ hiệu quả với những kẻ tấn công hời hợt không chịu được sự nhàm chán
      Các tổ chức nhà nước hoặc nhóm hacker tội phạm hoàn toàn sẵn sàng bỏ công sức đó
    • Nhìn theo hướng tích cực, chỉ với một LLM nhỏ chạy cục bộ cũng có thể dễ dàng cải thiện loại mã chất lượng thấp này
  • Tôi từng thấy những hệ thống như vậy tại triển lãm công nghiệp quốc phòng Mỹ, nên khả năng cao là chúng đang được dùng ở đâu đó