
미국 오면 엔지니어 생활이 우아해질 것 같죠?
천만의 말씀입니다.
여기서도 새벽 3시에 PagerDuty 울리면 좀비처럼 일어납니다.
가장 끔찍한 알람이 뭔지 아십니까?
"서비스 응답 속도가 느린데, 시스템 지표는 정상입니다."
CPU도 널널하고, 메모리도 남고, 네트워크 트래픽도 평온합니다.
그런데 고객은 접속이 안 된대요.
이럴 때 SRE는 미쳐버립니다.
귀신이 곡할 노릇이죠.
만약 그 귀신이 'Singularity' 같은 놈이라면, 당신은 절대 원인을 못 찾습니다.
최근 보안 커뮤니티에서 조용히 돌고 있는 문서 하나를 봤습니다.
이름은 Singularity.
리눅스 커널 6.x 버전을 타겟으로 하는 최신 루트킷(Rootkit)입니다.
단순한 해킹 툴이 아닙니다.
이건 시스템 엔지니어와 보안 담당자를 바보로 만드는 '투명 망토'입니다.
보통 해킹을 당하면 로그가 남거나, 이상한 프로세스가 top에 뜨거나, 낯선 포트가 열리죠.
우리는 습관적으로 터미널을 열고 명령어를 칩니다.
ps -efnetstat -antplsmod
그런데 이 루트킷이 로드되는 순간, 당신이 믿던 그 명령어들은 거짓말을 시작합니다.
1. 당신의 눈(Monitoring)을 가립니다.
이 녀석은 ftrace 인프라를 이용해 시스템 콜을 훅킹(Hooking)합니다.
쉽게 말해, 커널이 사용자에게 정보를 보여주는 수도꼭지 자체를 조작하는 겁니다.
특정 프로세스를 숨기는 건 기본입니다.
더 무서운 건 네트워크 은폐 능력입니다.
리눅스 네트워크 분석의 표준인 ss 명령어나 conntrack 테이블에서 특정 연결을 아예 지워버립니다.
Netlink 필터를 건드려서 패킷 분석기조차 속입니다.
서버는 해커와 통신 중인데, 당신 모니터에는 '연결 없음'으로 뜹니다.

2. 보안 도구(Security Tools)를 무력화합니다.
요즘 대세인 eBPF 기반의 모니터링 도구들 있죠?
Datadog이나 Cilium 같은 것들.
이 루트킷은 BPF 시스템 콜을 가로채서 이들의 탐지까지 피해 갑니다.
심지어 SELinux도 우회합니다.
보안 팀이 "SELinux Enforcing 모드니까 안전해"라고 말한다면, 이 문서를 보여주세요.
특정 ICMP 패킷(트리거)을 받으면, SELinux가 켜져 있어도 셸 권한을 탈취합니다.
3. 포렌식(Forensics)을 비웃습니다.
사고가 터지면 보통 메모리 덤프를 떠서 분석하죠.
Volatility 같은 도구로요.
이 놈은 /proc/kcore나 /proc/kallsyms 접근을 필터링합니다.
메모리 포렌식을 하려고 해도, 루트킷이 있는 메모리 영역만 쏙 빼고 보여줍니다.
로그 파일?
dmesg, journalctl에 기록되는 로그도 실시간으로 필터링해서 자기 흔적만 지웁니다.
완벽한 증거 인멸입니다.
제가 네이버 검색 인프라팀에 있을 때, HDFS 장애 원인을 찾느라 3일 밤을 샌 적이 있습니다.
그때는 적어도 로그는 진실을 말하고 있었죠.
하지만 이런 수준의 루트킷이 서버 팜(Server Farm)에 침투하면 답이 없습니다.
SRE로서 우리가 할 수 있는 일은 뭘까요?
서버 내부에서 실행되는 명령어(ps, ls, netstat)를 맹신하지 마십시오.
내부가 썩었을 땐, 외부에서 봐야 합니다.
VPC Flow Logs 같은 네트워크 장비단의 로그를 대조하거나,
AWS GuardDuty 같은 인프라 레벨의 이상 징후 탐지를 믿어야 합니다.
서버 안에서 "나 괜찮아"라고 말한다고 해서, 진짜 괜찮은 게 아닙니다.
가용성 99.999%를 지키려다 내 건강이 0%가 되지 않으려면,
'시스템은 언제나 거짓말을 할 수 있다'는 사실을 기억해야 합니다.
오늘 밤은 호출 없이 잠들길 바랍니다.
이상입니다.


