thông qua mô phỏng
Nội dung các bước được mô tả chi tiết ở các mục sau.
3.2. BƯỚC 1, THU THẬP FIRMWARE TỪ CÁC NHÀ CUNG CẤP THIẾT BỊ ĐỊNH TUYẾN THIẾT BỊ ĐỊNH TUYẾN
Ở bước đầu tiên, tiến hành thực hiện việc thu thập firmware từ website của các nhà cung cấp thiết bị định tuyến như: TP-link, D-link, Linksys…Do số lượng firmware được các nhà phân phối cung cấp quá lớn, không thể tải về một cách thủ công nên cần sử dụng một chương trình viết bằng ngôn ngữ lập trình Python để tự động hóa việc tải firmware.
Hai nguồn chính trong việc thu thập firmware bao gồm:
- Các website của nhà phân phối như: D-link, Belkin, Xerox, Tp-link, Asus…
- Các trang tin FTP chuyên dụng trong việc tìm kiếm và thu thập địa chỉ URL chứa firmware dựa vào từ khóa các nhà phân phối để tải về.
Các tập tin khi tải về thường được nén bằng các chuẩn khác nhau. Chính vì vậy, cần phải giải nén để tiến hành trích chọn mã nguồn nhị phân là firmware thực sự. Tải Firmware từ Internet Bóc tách Firmware (FMK hoặc Binwalk) Mô phỏng Firmware
dựa trên QEMU đã cài các công cụ giám
sát Thực thi các ứng dụng
trên Firmware và phân tích kết quả giám sát Internet Firmware Kết quả Bước 1 Bước 3
Thực hiện tải và giải nén firmware
- Lập trình chương trình download.py có tính năng tự động tải tập tin firmware và giải nén tập tin:
from os.path import basename import os
#from urlparse import urlsplit
import urllib.parse
#import urllib2
import urllib.request
from urllib.request import urlopen import tarfile
import pyunpack import zipfile import rarfile
def download(url, out_path):
response = urlopen(url)
localName = basename(response.url)
urllib.request.urlretrieve(url, out_path + localName)
print("-->Tai thanh cong tap tin tu url: " + url) return localName
for urlFile in open('data.txt'):
print("Tai tap tin tu url: " + urlFile) nameFile = download(urlFile, './') outFolder = nameFile[:-4] os.mkdir('./' + outFolder + '/') if zipfile.is_zipfile(nameFile): zip = zipfile.ZipFile(nameFile) zip.extractall('./' + outFolder) elif tarfile.is_tarfile(nameFile): tar = tarfile.open(nameFile) tar.extractall('./' + outFolder) elif rarfile.is_rarfile(nameFile): rar = rarfile.RarFile(nameFile) rar.extractall('./' + outFolder)
print("-->Giai nen thanh cong tap tin: " + nameFile)
- Tạo tập tin data.txt chứa các đường link tải tập tin firmware, ví dụ: https://ftp.dlink.ru/pub/NAS/DNS- 320/Firmware/DLINK_DNS320.2.05b10(2.13.0226.2016).zip https://ftp.dlink.ru/pub/NAS/DNS-320/Firmware/DNS- 320_A1_FW_v2.00.rar https://ftp.dlink.ru/pub/NAS/DNS-320/Firmware/DNS- 320_A2_FW_v2.03b03.rar https://ftp.dlink.ru/pub/NAS/DNS-320/Firmware/DNS- 320_A2_FW_v2.05b08.zip ………
Các tập tin firmware được tải về và được giải nén: