대부분의 사이트 운영자는 구글이 표시하는 '레드 스크린 오브 데스(Red Screen of Death)' 경고 화면을 보거나, 고객으로부터 직접 연락을 받고 나서야 자신의 웹사이트가 해킹당했다는 사실을 알게 됩니다. 이는 매우 위험한 상황입니다. 그만큼 오랫동안 웹사이트가 악성코드에 감염된 상태였다는 뜻이며, 이미 사이트의 평판과 고객 데이터 프라이버시에 심각한 피해가 발생했을 수 있기 때문입니다.
오늘날 웹사이트는 모든 비즈니스의 중심입니다. 전자상거래 결제, 고객 데이터 관리, 마케팅 등 거의 모든 업무가 웹사이트를 통해 처리됩니다. 그럼에도 불구하고 웹사이트 개발 과정에서 보안은 쉽게 간과되곤 하고, 결국 해킹 피해로 이어집니다. 보안 업계에는 이런 말이 있습니다.
호스팅 환경이나 개발팀 규모, HTTPS 적용 여부와 무관하게, 충분한 보안 조치가 없다면 어떤 웹사이트든 해킹에 취약할 수밖에 없습니다. 보안은 지속적으로 관리해야 하는 프로세스이며, 100% 완벽한 보안은 존재하지 않습니다. 따라서 사전 예방적 보안 조치를 실천하고, 만일의 해킹 상황에 대비하는 것이 무엇보다 중요합니다.
이 글에서는 내 웹사이트가 해킹되었는지 판단할 수 있는 주요 징후들을 하나씩 살펴보겠습니다.
웹사이트가 해킹되었다는 15가지 징후
1. 크롬 등 브라우저에서 사이트 접속 시 경고 메시지가 표시됨
고객이나 본인이 사이트에 접속했을 때 크롬(Chrome)에서 '이 사이트는 해킹되었을 수 있습니다'라는 경고 메시지가 나타난다면, 아마도 실제로 해킹당한 것입니다. 이 메시지는 웹사이트가 구글 세이프 브라우징(Google Safe Browsing)의 블랙리스트에 등재되었을 때 표시됩니다.
크롬, 파이어폭스(Firefox), 사파리(Safari), 오페라(Opera) 등 주요 브라우저는 구글의 블랙리스트를 공유하며 방문자에게 경고를 표시합니다. 경고 문구는 구글이 탐지한 문제 유형에 따라 다르지만 대체로 아래 이미지와 같은 형태입니다.
2. 구글 서치 콘솔에서 해킹 또는 멀웨어 감지 알림 수신
웹사이트가 구글 서치 콘솔(Google Search Console, 구글 웹마스터 도구)에 연결되어 있다면, 구글이 해킹 사실을 감지했을 때 알림 메시지와 이메일을 발송해 줍니다. 이는 구글이 악성코드나 스팸 콘텐츠를 발견했거나, 사이트가 침해되었다고 판단할 만한 근거가 있다는 의미입니다.
알림에는 대개 의심되는 URL 목록과 예상 공격 경로가 포함되어 있습니다. 이 가이드 후반부에서 이러한 메시지를 받았을 때의 대응 방법도 함께 다룹니다.
3. 호스팅 업체가 웹사이트를 비활성화함
호스팅 회사는 서버를 정기적으로 스캔하여 악성코드를 찾아내고, 감염이 같은 서버의 다른 사이트로 번지지 않도록 해킹당한 웹사이트를 즉시 비활성화하는 경우가 많습니다. 호스팅 업체가 계정을 정지하는 주요 원인은 다음과 같습니다.
- 서버에서 멀웨어 코드가 발견된 경우
- 도메인이 구글, Norton Safe Web, Spamhaus 등에 블랙리스트로 등재된 경우
- 서버에서 스팸 또는 피싱 이메일이 발송되고 있는 경우
- 악성코드 실행으로 인한 비정상적으로 높은 CPU 사용량
4. 계정의 아웃바운드 포트 80, 443, 587, 465가 차단됨
경우에 따라 호스팅 업체는 사이트를 완전히 정지하는 대신 리소스 사용을 제한하기도 합니다. GoDaddy, HostGator, BigRock 등은 자동화 시스템을 통해 계정의 아웃바운드 포트 80, 443, 587, 465 연결을 차단합니다. 이는 멀웨어 감염 확산을 막고 서버로부터의 스팸 발송을 방지하기 위한 조치입니다.
악성 파일이 서버에서 격리되고 자동 바이러스 검사를 통과하면 차단 해제를 요청할 수 있습니다.
5. 고객들이 신용카드 정보 유출을 호소함
해커들은 날이 갈수록 교묘해져서, 웹사이트에 입력되거나 저장된 신용카드 정보를 수집하는 악성 기법을 사용합니다. 수집된 카드 정보는 인터넷에서 판매되어 1달러부터 1,000달러 이상까지 다양한 금액의 부정 거래에 악용됩니다.
이러한 공격은 주로 표적형으로 진행되며, 전자상거래 스토어의 보안 취약점이 원인입니다. Magento, OpenCart, PrestaShop 같은 CMS를 사용한다면 설치된 플러그인 중 하나에 심각한 보안 결함이 있을 가능성이 높습니다.
6. 발송한 이메일이 스팸 폴더로 분류됨
해커들은 해킹한 웹사이트의 멀웨어를 이용해 대량의 스팸 메일을 발송하는 것으로 악명 높습니다. 이런 스팸 활동 때문에 전 세계 메일 서버가 여러분의 서버와 IP 주소를 블랙리스트에 올릴 수 있습니다. 그 결과, 정상적인 이메일마저 받는 사람의 스팸 폴더로 들어가게 됩니다. 스팸 폴더에 빠진 이메일 하나하나가 곧 비즈니스 기회와 온라인 평판의 손실입니다.
7. 웹사이트 코드에 수상한 자바스크립트가 발견됨
웹페이지 소스에서 낯설거나 난독화된, 암호문처럼 생긴 자바스크립트 코드를 발견했다면 즉시 주석 처리하세요. 해당 코드는 비밀번호, 신용카드 정보, 기타 민감한 고객 정보를 탈취하는 데 사용될 수 있습니다. 방문자를 다른 악성 사이트로 리디렉션하거나 팝업·광고를 띄우는 용도로도 쓰입니다.
실제로 보안 연구진은 최근 다수의 해킹된 Magento 스토어에서 악성 jQuery 코드를 발견했습니다. 이 작은 코드 조각은 결제(Checkout) 페이지에서 신용카드 정보를 악성 서버로 전송합니다. 유사한 문제를 겪고 있다면 카드 정보 탈취 멀웨어 관련 자료를 참고하세요.
8. 웹사이트가 갑자기 매우 느려지고 오류 메시지가 표시됨
웹사이트가 갑자기 현저히 느려지고 오류 메시지가 나타난다면, 멀웨어가 서버 리소스를 소모하고 있을 가능성이 큽니다. 특히 결제 페이지, 로그인 페이지, 회원가입 페이지가 주요 표적이 됩니다. 평소 4초 만에 로딩되던 페이지가 10초 이상 걸린다면 뭔가 잘못된 것입니다.
9. 에러 로그에서 예상치 못한 오류 메시지 발견
에러 로그에 deprecated 함수, undefined offset, connection denied 등 익숙하지 않은 오류 메시지가 자주 나타날 수 있습니다. 파일 경로나 오류 내용이 낯설다면 해당 코드의 진위 여부를 확인하거나 멀웨어 검사를 실행하세요. 흔히 발견되는 오류 메시지 예시는 다음과 같습니다.
PHP Deprecated: Function ereg_replace() is deprecated in /home/xxxxxxxx/public_html/js/extjs/resources/images/magento/grid/kala.php(1) : eval()'d code on line 1PHP Notice: Undefined index: _upl in /home/xxxxxxxx/public_html/index.php on line 64PHP Fatal error: require_once(): Failed opening required '/home/xxxxxxxx/public_html/js/shell.phpPHP Parse error: syntax error, unexpected 'if' (T_IF) in /home/xxxxxxxx/public_html/js/index.php on line 40
10. 본인이 생성하지 않은 새 관리자 계정이나 FTP 계정 발견
새로운 관리자 계정, 데이터베이스 사용자, FTP 계정이 발견된다면 해킹의 강력한 신호입니다. 해커는 웹사이트와 서버에 대한 접근권을 유지하기 위해 권한 있는 계정을 남겨둡니다. 이런 계정은 백도어 역할을 하며, 해커가 원할 때마다 사이트에 접속할 수 있게 해줍니다.
11. 최근 수정된 파일이 발견됨
핵심 시스템 파일이 최근에 수정된 흔적이 있다면, 이전 버전과 비교하여 무엇이 변경되었는지 확인하세요. 공격자는 악성코드 실행, 스팸 메일 발송, 백도어 생성을 위해 파일을 변조했을 수 있습니다.
또한 파일명이 수상한 파일이나 업로드 디렉터리에 존재해서는 안 될 서버 사이드 스크립트(.php, .aspx, .py 등)가 있다면 해킹을 강력히 의심해야 합니다.
12. 사이트 방문 시 광고와 팝업이 열림
방문자에게 스팸 광고나 팝업이 표시된다면, XSS(교차 사이트 스크립팅) 또는 악성코드 삽입으로 인해 사이트가 침해되었을 가능성이 높습니다. 해커는 광고 노출 수익으로 돈을 벌기 때문입니다. 이 경우 구글 세이프 브라우징 팀이 사이트에서 소셜 엔지니어링 콘텐츠를 감지했다는 통보 메일을 보내오기도 합니다.
13. 웹사이트가 해킹된 사이트로 리디렉션됨
역시 XSS 또는 서버 사이드 코드 조작의 결과물입니다. 해커가 여러분의 웹 트래픽을 피싱 페이지, 감염된 웹사이트, 심지어 경쟁사 사이트로 우회시키는 것입니다.
14. 존재하지 않는 페이지에서 트래픽 급증 현상 발생
해커들은 해킹한 웹사이트를 '스팸버타이징(spamvertising)'에 활용하여 트래픽 급증을 일으킵니다. 해커가 생성한 기존 또는 신규 페이지로 연결되는 링크가 담긴 스팸 메일이 여러분의 서버에서 발송되는 것입니다. '스팸(spam)'과 '광고(advertising)'의 합성어입니다.
스팸버타이징은 블로그, 웹사이트, 포럼, 댓글란에 하이퍼링크를 도배하여 해커 자신의 사이트 검색 순위를 높이는 데 사용됩니다.
15. .htaccess 파일에 알 수 없는 코드나 리디렉션 설정 존재
악성 리디렉션 사건의 대부분은 .htaccess 파일이 해킹되어 리디렉션 코드가 삽입된 경우입니다. 해커가 웹사이트 파일에 심어둔 '백도어'를 통해 가능한 일입니다. 주요 증상은 다음과 같습니다.
- 사이트가 빈 화면만 표시되고 로드되지 않음
- 사이트가 악성 웹사이트로 리디렉션됨
- 사이트가 구글로 강제 이동됨
- 구글이 사이트에 접근할 수 없음
- .htaccess 파일이 반복적으로 수정됨
해킹이 의심될 때 취해야 할 조치
1. VirusTotal.com 웹사이트 검사 실행: VirusTotal은 구글이 지원하는 강력한 도구로, 70개 이상의 주요 블랙리스트 및 멀웨어 엔진을 동시에 검사하여 웹사이트의 해킹 여부를 확인해 줍니다.
2. 구글 세이프 브라우징 사이트 상태 페이지에서 블랙리스트 확인: 해당 페이지 URL 끝의 'getastra.com'을 자신의 웹사이트 URL로 바꾸기만 하면, 구글 기준 블랙리스트 등재 여부를 확인할 수 있습니다. 해킹 세부 정보와 해결 단계도 함께 제공됩니다.
3. 웹사이트 접근 차단: 심각한 피해가 발생하거나 고객이 해킹 사실을 알기 전에, 웹사이트를 유지보수 모드로 전환하고 인가된 사용자만 접근할 수 있도록 제한하세요. .htpasswd 파일을 활용하면 됩니다.
4. cPanel의 바이러스 스캐너 실행: 대부분의 호스팅 업체는 cPanel 대시보드에 자동 바이러스 스캐너를 제공하여 알려진 멀웨어를 찾아줍니다. 이 검사는 기본적인 탐색을 수행하고 감염된 파일을 식별하는 데 도움이 됩니다. 다만 이런 스캐너는 해킹의 원인을 밝혀주지 못하며, 재감염으로부터 웹사이트를 보호해 주지 않는다는 점을 유의하세요.
5. 웹 방화벽(WAF)으로 웹사이트 보호: Astra Web Protection 같은 웹 방화벽을 도입하면 향후 유사한 해킹을 예방할 수 있습니다. 웹 애플리케이션 방화벽(WAF)은 사이트로 유입되는 트래픽을 모니터링하고 악성 요청을 차단합니다. Astra를 사용하면 전략적으로 배치된 '허니팟(honeypot)'과 정교한 메커니즘을 통해 악성 봇과 자동화 공격 도구도 차단할 수 있습니다.
6. 전문가의 멀웨어 제거 서비스 이용: 보안 전문가에게 의뢰하여 해킹된 웹사이트를 안전하게 복구할 수도 있습니다.