픽블엽 프로젝트의 서버 로그를 확인하던 중, 익숙하지 않은 경로 요청을 발견했다.
하루에도 몇 번씩 /index.php
요청이 들어오고 있었고, 이건 우리 프로젝트에서는 단 한 번도 사용한 적이 없는 경로였다.
픽블엽은 Spring Boot + Thymeleaf 기반 웹 프로젝트이기 때문에 .php
파일은 존재하지 않는다.
처음엔 단순한 오타인가 싶었지만, 같은 패턴의 요청이 계속 반복되고 있었고… 찾아보니 이것은 명백한 봇 기반 공격 시도였다.
/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Hello
이 요청은 PHP 기반의 프레임워크(예: ThinkPHP)에서의 취약점을 노리는 것이다.
Spring Boot에서는 아무 의미 없는 요청이지만, 만약 해당 경로에 취약한 PHP 코드가 존재한다면 공격자는 다음을 시도할 수 있다.
NginX로그를 확인해보니 /index.php
, /wp-admin/setup-config.php
등 존재하지 않는 경로에 대한 요청이 주기적으로 발생하고 있었다. 명백한 공격 패턴이다.
봇이 여러 경로를 자동으로 스캔하며 ‘운 좋게 하나라도 걸려라’ 하는 방식의 무차별 경로 스캐닝 공격이다.
이런 요청은 단순한 트래픽이 아니라, 실제로 서버의 취약점을 찾기 위한 공격 시도다. 목적은 다음과 같다.
AWS WAF는 고객이 정의한 조건에 따라 웹 요청을 허용, 차단 또는 모니터링(계수)하는 규칙을 구성하여 공격으로부터 웹 애플리케이션을 보호하는 웹 애플리케이션 방화벽이다. 해당 서비스를 이용하면 다음과 같은 리소스 유형을 보호 할 수 있다.
단점은 요금이 발생한다는 점 이다.
WAF는 강력하지만 유료이기 때문에, 프리티어 요금제를 사용하는 입장에서는 부담스럽다고 느꼈다.
그래서 비용이 들지 않는 Nginx 필터링 방식을 적용했다.
Ngnix 설정 파일(/etc/nginx/nginx.conf)에 아래의 내용을 추가해주면 끝이다.
픽블엽의 경우 기본적으로 Spring boot 프로젝트라 사실 아무 대응을 하지 않아도 큰 문제는 없지만 그래도 찜찜한 로그가 계속 남기기 싫어 공격을 차단한 방법을 찾아보고 적용했다.
보안은 "별일 없겠지"보다 "미리 차단하자"가 훨씬 싸게 먹힌다. Spring 프로젝트라고 해서 PHP 공격을 방치하면 안 되고, 로그에서 수상한 흔적을 발견했다면 바로 대응하는 습관이 중요 한 것 같다.
픽블엽을 통해 서버를 처음 운용해보면서 이런 간단한 것도 이제야 배우는 것 같다.ㅠ