내가 관리하는 서버 중 하나가 Wordpress 설치에 대한 무차별 대입 공격에 참여하고 있는 것 같습니다.
저는 이 문제를 여러 번 받았기 때문에 이를 방지하기 위해 취할 수 있는 조치에 대해 매우 잘 알고 있습니다. 그러나 제가 겪고 있는 문제는 외부로 나가는 공격을 탐지하는 것입니다. 서버는 여러 개의 가상 호스트가 있는 일반적인 Apache 서버입니다. 물론 여기서 복잡해집니다. 거기에 가상 호스트가 하나만 있으면 그다지 어렵지 않을 것입니다!
저는 현재 다음 명령을 사용하여 이 서버의 모든 포트에서 다른 컴퓨터의 포트 80으로 이동하는 트래픽을 기록하기 위해 tcpflow를 사용하고 있습니다.
tcpflow -i eth0 dst port 80 and src host <my_servers_ip> and port not 22
나는 이것이 tcpdump보다 더 낫다는 것을 알았습니다. 출력을 살펴보는 것은 잠시 후 다소 머리가 녹을 수 있습니다. :) tcpflow는 각 요청을 별도의 파일에 저장합니다.
다음은 의심스러운 활동이라고 생각되는 파일의 일부 출력입니다.
POST /wp-login.php HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Host: somedomain.com
Accept: */*
Cookie: wordpress_test_cookie=WP+Cookie+check
Content-Length: 97
Content-Type: application/x-www-form-urlencoded
log=jacklyn&pwd=london&wp-submit=Log+In&redirect_to=http://somedomain.com/wp-admin/tes1a0&testcookie=1
위의 "Host:"를 난독화했습니다. 이것이 공격받는 호스트라고 생각합니다(이것이 맞나요?).
그래서 제 질문은 이 악성 트래픽을 생성하는 가상 호스트를 어떻게 탐지할 수 있느냐는 것입니다. 그렇게 할 수 있다면 고객에게 이를 알릴 수 있으며 고객은 사이트를 조사하고 사이트를 중지하기 위해 필요한 변경을 수행하는 조치를 취할 수 있습니다.
모든 솔루션을 매우 감사하게 받았습니다 :)
답변1
나는 당신이 말한 내용을 통해 현재 클라이언트에서 Allow_url_fopen을 사용하여 URL 다운로드를 제한할 수 없는 설정에 있다고 가정합니다.
이 경우 표시되는 tcpflow 로그에 실제로 해당 정보가 포함되어 있지 않기 때문에 원래 PHP 스크립트로 돌아가는 것이 실제로 매우 어렵습니다.
고려해야 할 쉬운 옵션 중 하나는 나가는 요청에 요청을 수행한 실제 클라이언트를 식별하는 데 사용할 수 있는 공개 사용자 에이전트를 갖도록 강제하는 것입니다.
예를 들어, client1 웹사이트의 vhost 정의에 다음 명령을 추가할 수 있습니다.
php_admin_value user_agent client1
그러면 해당 웹사이트에서 수행된 모든 http 요청이 user-agent "client1"을 사용자에게 강제로 적용하게 되며, 이는 tcpflow 로그에 표시되어 해당 웹사이트를 보낸 사람이 누구인지 알 수 있습니다.
개인 정보 보호가 우려되는 경우 실제 클라이언트에 매핑할 수 있는 user_agent(예: 클라이언트 이름 암호화)를 사용할 수 있습니다.
그러나 일부 웹사이트는 제공된 user_agent에 따라 다르게 표시되고 이 설정은 의도적으로 클라이언트의 변경 시도를 방지하므로 사용성에 해를 끼칠 수 있습니다.