- 개요
2020-07-16일 경 https://ti.dbappsecurity.com.cn/ 사이트에 nginx backdoor 에 관한 포럼이 올라왔으며,
게시 시점 nginx 의 backdoor가 모든 백신에서 탐지되지 않았습니다.
backdoor는 공격자가 ngx_http_header_filter 함수를 수정하여 컴파일했으며 http 요청 시
cookie에 임의의 문자열을 넣었을 때 reverse shell이 연결되도록 하였습니다.
- 취약한 버전
File MD5 Checksum : ab498686505dfc645e14c6edad280da7
- 취약점 설명 및 분석
아래는 게시 시점 변조된 nginx에 대한 안티 바이러스 검사 결과입니다.
수정된 ngx_http_header_filter 함수는 아래와 같습니다. http 요청 시
cookie 에 “lkfakjf” 라는 문자열이 포함되어 있으면 connect_shell 함수를 호출합니다.
해당 문자열은 connect_shell()을 호출시키기 위한 key로 사용됩니다.
connect_shell 함수는 reverse shell을 생성하는 로직입니다. 위의 로직에서
key외에 값을 더 받는 것을 알 수 있으며 아래 로직에서 host, port 가 필요한 것이 보입니다.
즉, http 요청 시 cookie 에 lkfakjf[host]:[port]와 같은 형식으로 요청 시
connect_shell()이 호출 되면서 입력한 host:port server로 연결하게 되는 것입니다.
현 시점 nginx 특정 버전에 한해 몇몇 백신에서 안티 바이러스가 검출됩니다. 하지만 많은 백신에서 검출하지 못하고 있습니다.
발견된 파일의 checksum 은 공개되었지만 해당 파일을 따라하여 변조한 파일들이 존재할 수 있기 때문에
nginx 공식 사이트에서 제공받은 파일만 사용하도록 해야 합니다.
또한 nginx 자체의 보안 문제는 아니기 때문에 별도의 패치는 존재하지 않습니다.
- 위협요소
변조된 nginx로 서버를 구동할 경우 공격자의 주기적인 접속이 있을 수 있고 내부 서버로의 침투, 좀비PC로 활용될 수 있습니다.
또한 파일 업로드와 같은 취약점이 존재할 시 정상적인 nginx가 변조된 nginx로 교체될 수 있습니다.
- 대응방안
1) Nginx 공식 사이트에서 제공되는 서버 사용
2) Decompiler 를 사용해 “sh”, ”bash”, “cmd.exe” 과 같은 문자열 혹은 정상적이지 않은 함수 확인
3) ps 명령어를 사용해 nginx 권한으로 “sh”, “cmd.exe”, “nc” 와 같은 프로그램이 실행되었는지 확인
4) 변조된 파일이라면 정상적인 파일로 교체