Phân tích phần sụn – IOT (nghe phần sụn firmware như đang ăn bún bò hay phở vậy , đói bụng quá)

Internet of Things còn được gọi là IoT và ngày nay rất nhiều thiết bị IoT được đưa vào thị trường để thu thập và chia sẻ dữ liệu trên đám mây. Bất kỳ thiết bị hiện đại nào mà chúng ta sử dụng sẽ tương tác với firmware, là một đoạn mã trên thiết bị cho phép và cho phép thiết bị thực hiện các tác vụ khác nhau cần thiết để thiết bị hoạt động. Nói một cách đơn giản firmware là phần mềm được lập trình trên thiết bị phần cứng. Trong hướng dẫn này, chúng ta sẽ tập trung vào phân tích firmware ở các cấp độ khác nhau, chẳng hạn như trích xuất hay phân tích nhị phân và các thành phần khác như hệ thống tệp, cơ chế nén, mã hóa, bộ tải khởi động, v.v.

CHFI v10 https://cehvietnam.com/2021/07/29/khoa-hoc-dao-tao-chfi-v10-va-ho-tro-thi-chung-chi-quoc-te-chfi-v10/

CPENT v1 https://cehvietnam.com/2021/07/10/khoa-hoc-cpent/

Phương pháp luận

Giống như bất kỳ tiến trình phân tích phần mềm nào khác, sẽ có hai cáchlà phân tích Thủ công và Tự động. Phân tích thủ công hoàn chỉnh không dễ dàng vì nó tốn thời gian và đó là lý do chúng ta sử dụng Phân tích firmware tự động, và điều này thật dễ dàng. Để phân tích tự động, có rất nhiều công cụ có sẵn như Firmwalker, FACT – Công cụ so sánh và phân tích firmware , Bộ công cụ phân tích firmware , v.v. thông thường các công cụ sẽ phân tích

  • etc/shadow và etc/passwd
  • liệt kê thư mục etc/ssl
  • Tìm kiếm các tệp liên quan đến SSL như .pem, .crt, v.v.
  • Tìm kiếm tập tin cấu hình
  • Tìm tập tin kịch bản
  • Tìm kiếm các tệp .bin khác
  • Tìm kiếm các từ khóa như quản trị viên, mật khẩu, điều khiển từ xa, v.v.
  • Tìm kiếm các máy chủ web phổ biến được sử dụng trên thiết bị IoT
  • Tìm kiếm các tệp nhị phân phổ biến như ssh, tftp, dropbear, v.v.
  • Tìm kiếm URL, địa chỉ email và địa chỉ IP
  • Hỗ trợ thử nghiệm để thực hiện lệnh gọi tới API Shodan bằng Shodan CLI

Để thực hiện phân tích IoT Firmware, điều đầu tiên cần làm là tải xuống firmware của thiết bị từ trang web chính thức của nhà cung cấp hoặc từ Github. Sau đó trích xuất và giải nén ở các định dạng khác nhau như bin, zip, gzip, tar, v.v.

Phân tích firmware IoT – Từng bước

Để phân tích firmware , chúng ta sẽ sử dụng IoTGoat từ OWASP. Tải xuống Chương trình cơ sở từ  https://github.com/OWASP/IoTGoat/releases .

Khi tệp hình ảnh được tải xuống, hãy bắt đầu phân tích bằng  công cụ binwalk  đã có trong Kali Linux (với phiên bản mới nhất hiện nay là 2022.4) trong hình là kali 2019 ??. Để tiến hành hãy gõ lệnh sau

#binwalk IoTGoat-raspberry-pi2.img

Xem kết quả ta thấy , bạn có thể nhận thấy rằng Firmware này thuộc  hệ thống tệp Sqaushfs  . Các bạn cũng có thể dùng hexdump -c để tìm header của hệ thống tập tin, với sqaushfs có phần header là q h fs (hãy search lại xem đúng không)

Chúng tôi sẽ liệt kê một số hệ thống tệp phổ biến của Thiết bị IoT

  • squashfs
  • cramfs
  • JFFS2
  • yaffs2
  • ext2

Giống như các hệ thống tệp khác nhau, chúng ta cũng có nhiều loại hệ thống tệp nén khác nhau. IoTGoat sử dụng   phương pháp nén xz , một số khác thì dùng LZMA (như cái DVRF.bin)

  • LZMA
  • gzip
  • khóa kéo
  • Zlib
  • xz
  • ARJ

Bên cạnh file system, bạn thấy có chữ  little endian Little Endian  và  Big Endian  là những cách lưu trữ kiểu dữ liệu nhiều byte. Byte đầu tiên biểu diễn dữ liệu của kiểu dữ liệu nhiều byte được lưu trữ đầu tiên trong  các máy Big  Endian  .

Trong  các máy Little Endian  , byte cuối cùng biểu diễn dữ liệu của kiểu dữ liệu nhiều byte được lưu trữ trước.

Vì vậy, ta đã biết được những điều được đề cập dưới đây từ phân tích ban đầu .

  • hệ thống tập tin –  Squashfs
  • nén –  xz
  • địa chỉ –  29360128

Bằng cách biết địa chỉ, chúng ta có thể hiểu sau bao nhiêu phần bù, nó sẽ bắt đầu trích xuất, trong trường hợp của chúng ta là  29360128 .

Tiếp theo để trích xuất file .img và lưu thành file .bin chúng ta sử dụng lệnh dưới đây

# dd if=IoTGoat-raspberry-pi2.img bs=1 skip=29360128 of=iotgoat.bin

“ if ” đại diện cho tệp đầu vào và “ of ” đại diện cho tệp đầu ra.

“ bs ” chỉ định kích thước khối cho cả tệp đầu vào và tệp đầu ra.

Bây giờ  .img  đã được sao chép vào  .bin . Lúc này ta có thể kiểm tra tệp bằng binwalk.

Vì hệ thống tệp là Squasfs, hãy giải nén iotgoat.bin bằng cách sử dụng unsquashfs, được tích hợp sẵn với Kali linux. Hãy sử dụng lệnh sau

# unsquashfs iotgoat.bin

Tệp giải nén sẽ được tìm thấy trong  thư mục squashfs-root 

Thay vì sử dụng  Squashfs , chúng ta cũng có thể sử dụng  binwalk  để giải nén tệp hình ảnh. Để làm như vậy, hãy sử dụng   cờ  –e trong binwalk  như được hiển thị bên dưới.

Các tệp được trích xuất bằng binwalk sẽ có trong thư  mục _IoTGoat-raspberry-pi2.img.extracted

Hãy đi sâu vào bước tiếp theo. Bây giờ chúng ta phải mở thư mục giải nén. Bạn có thể chọn thư mục theo phương pháp mà bạn đã sử dụng để giải nén

# cd _IoTGoat-raspberry-pi2.img.extracted

# cd squashfs-root

Khi chúng tôi vào thư mục giải nén, hãy tìm kiếm các tệp/thông tin nhạy cảm. Khi chúng ta di chuyển đến thư mục /etc, chúng ta sẽ thấy có  các tập tin passwd  và  shadow  .

Hãy xem có gì trong  tệp passwd  . Ở đây chúng ta biết rằng có một người dùng tên là  iotgoatuser  .

Tương tự, chúng ta hãy kiểm tra tệp shadow.

Bây giờ cho phần tiếp theo, hãy tải xuống tệp IoTGoat-x86.vmdk từ  https://github.com/OWASP/IoTGoat/releases  và chạy phiên bản ảo. Khi bạn chạy VM, hãy truy cập Kali linux và tìm kiếm IP của IoTGoat.

arp-scan – – local

hoặc dùng netdiscover -r hay nmap -sn , cứ thử nhiều cách khác nhau

Bây giờ, chúng ta hãy lấy danh sách từ tên người dùng, mật khẩu từ  https://github.com/securing/mirai_credentials/blob/master/mirai_creds.txt  và lưu nó dưới  /usr/share/wordlists/

Bây giờ chúng ta hãy sử dụng  hydra  hoặc  medusa  để bẻ khóa mật khẩu.

(CertMaster) – Hừm, khoan đã, sao nó lại hack ngay ssh thế này nhĩ, ít ra phải nmap 1 phát xem co mở port 22 không đã chứ 🙂 , nhưng cứ cho là nó mở đi, brute force xem sao …

Đối với  hydra , hãy  sử dụng lệnh bên dưới

hydra -V -f -t 4 -l iotgoatuser -P /usr/share/wordlists/mirai_creds.txt ssh://192.168.1.5

với :

-V — để hiển thị một vài thông tin đăng nhập+mật khẩu trong khi khai thác mật khẩu;

-f — là điểm dừng ngay khi tìm thấy mật khẩu cho thông tin đăng nhập được chỉ định;

-l – dành cho tên người dùng

-P — là đường dẫn đến từ điển mật khẩu;

ssh://192.168.60.50 — là một dịch vụ và địa chỉ IP của nạn nhân.

Ở đây với mục đích trình diễn, tôi đã thêm IP của IoTGoat của mình. Bạn thêm IP mà bạn nhận được khi thực hiện quét arp.

Đối với medusa, sử dụng lệnh dưới đây

# medusa –u iotgoatuser –P /usr/share/wordlists/mirai_creds.txt –h 192.168.1.5 -M ssh -f

Các tùy chọn :

-h — là địa chỉ IP của nạn nhân;

-u — là thông tin đăng nhập;

-P — là một đường dẫn từ điển;

-M — là một lựa chọn mô-đun;

-f — dừng ngay khi tìm thấy cặp đăng nhập/mật khẩu hợp lệ;

Từ đó, chúng tôi biết mật khẩu là  7ujMko0vizxv .

Bây giờ, hãy kết nối với SSH của IoTGoat

# ssh iotgoatuser@192.168.1.5

Khi được yêu cầu nhập mật khẩu, hãy nhập mật khẩu được tìm thấy ở trên. Sau khi hoàn thành, chúng tôi đã thành công trong

Tiếp theo, hãy quay lại thư mục squashfs-root để lấy một số thông tin thú vị.

Điều hướng đến usr/lib/lua/luci/controller/iotgoat nơi chúng tôi tìm thấy tệp cơ sở dữ liệu có tên sensordata.db

# sqlite3 sensordata.db

Chúng ta thấy rất nhiều id email cùng với ngày sinh

Đồng thời khi điều hướng đến /lib/functions, có thể thấy các tệp shell script khác nhau.

Khi điều hướng đến usr/lib/lua/luci/view/iotgoat, ta tìm thấy các tệp htm có thể được truy cập thông qua ứng dụng web IoTGoat

Một điều thú vị khác mà chúng tôi tìm thấy là dropbear chạy ở cổng 22 có mặt trong các thư mục khác nhau.

/usr/sbin/dropbear

/etc/config/dropbear

/etc/init.d/dropbear

Để biết danh sách các tệp liên quan đến dropbear, hãy làm như sau

# cat dropbear.list

Trong thư mục này, nhiều tệp cũng chứa thông tin nhạy cảm, chẳng hạn như hiển thị bên dưới.

Nếu tiếp tục đào, chúng ta có thể nhận được nhiều thông tin như thế này có thể được sử dụng cho một cuộc tấn công khác.

Bây giờ, hãy quay lại thư mục squashfs-root và điều hướng đến thư mục bin. Ở đó chúng tôi sẽ cố gắng để có được một số thông tin thú vị. Đối với mục đích mô phỏng, hãy sử dụng xác định kiến ​​trúc bằng cách

# readelf –h busybox

Từ đó, chúng tôi biết rằng đó là Kiến trúc ARM

Phần kết luận

An ninh mạng là rất quan trọng nếu bạn muốn thành công trực tuyến. Các tin tặc ngày càng giỏi hơn trong các trò chơi của chúng, điều đó có nghĩa là bạn cần một nhóm chuyên dụng sẽ luôn cập nhật các vấn đề bảo mật và cung cấp khả năng bảo vệ suốt ngày đêm cho các trang web của bạn.

Nguồn

Tác giả : Meshach.M – Senior Security Consultant tại Cyberarch Consulting

BQT – Ở phần crack mật khẩu tôi nghĩ là mình có thể tiến hành unshadow và bẻ khóa với hashcat thay vì chạy file vmdk , trong các tình huống khác thì các bạn có thể sử dụng những giải pháp firmware emulator như QEMU và Firmadyne để tiến hành giả lập.

Soạn xong bài này có một học viên vừa thi đậu chứng chỉ CHFI v10 với số điểm khá cao 141/150, là một nữ chuyên gia an toàn thông tin đã có 3 cert Comptia Security +, ECCouncil CEH và CHFI , đây toàn là hàng đỉnh nằm trong danh sách chỉ thị 8750m.01 của bộ quốc phòng Mỹ. Lưu ý, ngoài việc thi đậu chứng chỉ thì nữ chuyên gia này thực hành làm lab rất tốt nhé !

CHFI v10 https://cehvietnam.com/2021/07/29/khoa-hoc-dao-tao-chfi-v10-va-ho-tro-thi-chung-chi-quoc-te-chfi-v10/

CPENT v1 https://cehvietnam.com/2021/07/10/khoa-hoc-cpent/

Trả lời

Bạn cần phải đăng nhập để gửi bình luận:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s