Tìm thấy backdoor trong Firmware của router D-link
Ông đã tìm thấy backdoor trong firmware v.1.13 của router D-link DIR-100 revA. Craig đã tìm ra và bung file hệ thống SquashFSnhằm tải các file firmware hệ thống file máy chủ Webserver vào IDA
Quan sát danh sách các chuỗi (string), Craig đã chú ý tới phiên bản sửa đổi của thttpd, thư viện thttpd-alphanetworks/2.23, được thực thi để cung cấp giao diện quyền quản trị của router, thư viện này được viết bởi Alphenetworks, một công ty nhỏ của D-link. Phân tích sâu hơn thư viện này, Craig tìm thấy một số các hàm, có đặc điểm có tên được đặt tên có tiền tố alpha, trong đó có alpha_auth_check. Hàm này có nhiệm vụ phân tích yêu cầu http (http request) trong pha xác thực.
“Chúng ta có thể thấy mỗi khi hàm alpha_auth_check được gửi đến một tham số(sẽ được lưu ở thanh ghi @s2), nếu hàm này trả kết quả về là -1(0xFFFFFFF), tiến trình sẽ nhảy tới cuối của hàm alpha_httpd_parse_request, nếu không nó sẽ tiếp tục quy trình xử lý.
Phân tích tham số được gửi đến hàmalpha_auth_check, Craig đã có thể xây dựng lại quy trình xác thực. Hàm sẽ phân tích cấu trúc request URL, nếu nó có chứa chuỗi “graphic/” hoặc là “public/”, thì yêu cầu này sẽ được cho qua mà không cần xác thực, trong đó “graphic/” và “public/” là các thư mục con nằm trong thư mục gốc thiết bị.
Một chi tiết nữa được tìm thấy là nếu đổi tên người đăng nhập vào trình duyệt Web thành “xmlset_roodkcableoj28840ybtide”, ta có thể vượt qua được cơ chế an toàn của thiết bị, có thể điều khiển được các chức năng cao hơn của router.
Craid tìm hiểu thêm về code “xmlset_roodkcableoj28840ybtide” trên Google, theo một tài liệu trên Internet và sau khi phân tích sâu hơn, Craig đã có thể khôi phục được phần thân của hàm alpha_auth_check:
int alpha_auth_check(struct http_request_t *request)
{
if(strstr(request->url, "graphic/") ||
strstr(request->url, "public/") ||
strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)
{
return AUTH_OK;
}
else
{
// These arguments are probably user/pass or session info
if(check_login(request->0xC, request->0xE0) != 0)
{
return AUTH_OK;
}
}
return AUTH_FAIL;
}
Vấn đề đáng lo hơn là, bất kỳ ai kết nối tới router, qua mạng nội bộ hay Wifi, đều có thể đặt tên người đăng nhập về mã nêu trên, đều có khả năng để truy cập vào trang cấu hình web vàcó thể khai thác được lỗ hổng này
Craig mở rộng hơn phạm vi nghiên cứu, ông phát hiện ra rất nhiều router D-link có chứa backdoor trên. Ông lại tìm kiếm chuỗi “thttpd-alphanetworks/2.23” trên trang web tìm kiếm thiết bị Shodan (http://www.shodanhq.com/), được chuỗi kết quả:
Sau các chuỗi kiểm tra, Craig đi đến kết luận các thiết bị D-link sau có vẻ như đã có cài các backdoor: DIR-100,DI-524,DI-524UP,DI-604S, DI-604UP, DI-604+,
TM-G5240.
Ông cũng tìm hiểu trên các router của Planex, có cùng một phiên bản Firmware, ông cũng thấy các router sau đây cũng đã nhiễm backdoor BRL-04UR và BRL-04CW
Hãng D-link đã thừa nhận rằng có lỗ hổng trên trong các thiết bị của mình và D-linksẽ phát hành phiên bản firmware mới nhất, vá các lỗ hổng mới được phát hiện vào cuối tháng 11/2013.