해킹 방지 정책: 원 스트라이크 B클래스 아웃

최근 서버 해킹으로 골치를 먹고있습니다. 그냥 Apache와 PHP와 같은 어플리케이션의 버전 업그레이드만 잘하면 될 줄 알았는데, 어딘가의 PHP 스크립트에 구멍이라도 생겼는지 자꾸 서버에서 부정한 녀석들이 돌아가고 있네요.

지금까지 두 가지 종류의 해킹이 발생하였습니다. 처음으로 당한 해킹은 .htaccess 파일을 수정하여 광고를 삽입하는 거였습니다. 일부 디렉토리 및 .htaccess 파일의 권한을 변경하여 해킹이 재발하는 것은 막았습니다. 두 번째가 심각한 거였는데, 누군가가 IRC 봇을 설치해 두고 갔더군요. UDP 쪽 포트로 데이터가 넘쳐흘러 하룻밤 사이에 트래픽이 200G가 넘게 발생하였죠.

이 문제들을 분석해 보면 모두 PHP 스크립트의 보안 구멍을 통해 해킹한 것으로 보입니다. Apache의 사용자 권한 아래에 있는 부분만 해킹을 당하였고, 해커가 직접 SSH 등으로 서버에 침투한 기록은 남아있지 않았거든요.

그렇지만 스크립트에서 발생한 보안 구멍은 참 찾아내기 힘들죠. 해킹 시점을 어림 잡아 로그를 확인한다 하더라도,부정한 접속이 너무 많아 하나의 접속을 추려내기 힘듭니다. 조금 더 범위를 좁혀서 살펴보면 이제는 POST 메시지와 같이 로깅되지 않은 정보가 필요하게 되기 때문에 다시 분석에 막히게 됩니다.

결국 해킹 문제를 어떻게 할 까 고민하다, 가장 무식한 방법인 원 스트라이크 B클래스 아웃 규칙을 정했습니다.

내용은 간단합니다.

“서버에 부정한 방법으로 접근이 발견되는 경우 (스팸을 달러 오거나, 이상한 URI를 요청하거나, 요청 헤더가 표준에 맞지 않거나 등) 해당 IP가 속하는 B클래스의 모든 접속을 차단한다.”

사실 개별 IP를 차단하거나, 심해도 C클래스 수준에서 막으려고 했습니다. 하지만 삭제한지도 6개월을 넘긴 Pukiwiki에 스팸을 달려는 접속이 하루에도 1000건이, 각각의 IP 역시 거의 달라 최근 30일 기준으로 3000여 IP를 차단해야 하더군요. 특정 IP의 접속이 꾸준히 있는 편이지만, 접속이 1~2회만 있는 IP도 많고요.

이걸 하나씩 막다보면 거의 매일 새로운 IP를 추가해야 할 것 같아, 저의 귀찮음을 줄여보고자 정하게 된 것입니다. 어차피 개인 홈페이지이고, 접속자도 많지 않으니 큰 문제는 없을 것이라고 생각합니다. 차단된 IP 대역은 최소 6개월 이상 차단된 뒤, 해제될 예정입니다.

혹시나 해서 인터넷을 검색해보니 iptables로 텍스트 차단이 가능하군요. 서버에 위험한 키워드와 Pukiwki 관련 키워드 차단하도록 설정하였습니다. 위에서와 같이 바보 같이 IP를 하나하나 차단할 필요가 없었던 것이었습니다. 하핫…

Permanent link to this article: https://ravel.kr/blog/article/741/one_strike_b_class_out/

3 comments

  1. B 클래스라는 게 어떤 범위를 말하는 건가요? B 클래스에서 임의로 사용하는 7비트를 말하는 건가요?

  2. 수정: 7비트 아니라 14비트 겠네요.

    • 라벨 on 2012년 1월 10일 at 10:18 오후
      Author
    • Reply

    이미 윗 글은 망한 글이 되었네요. Strict한 의미로서 B클래스를 사용한 것은 아니었습니다. 예를 들어 1.23.45.67 이란 IP에서 문제를 일으키면 1.23.0.0/16을 모두 막는다는 소리였죠.

댓글 남기기

Your email address will not be published.