Computer >> 컴퓨터 >  >> 프로그래밍 >> HTML

워드프레스 SQL 인젝션 완벽 대응 가이드: 탐지부터 제거·예방까지

여러분의 워드프레스 사이트가 'SQL 인젝션(SQL Injection)'이라는 공격 때문에 매일 트래픽과 수익, 그리고 고객의 신뢰를 잃고 있을 가능성이 큽니다.

그 이유는 간단합니다. 어떤 해커가 여러분의 비즈니스 트래픽을 가로채어 다음과 같은 사이트로 유도하기로 결정했기 때문입니다.

  • 성인 사이트
  • 불법 마약 관련 사이트
  • 종교 광고 사이트
  • 기타 악성 사이트

결국 구글 검색 결과에 "기만적인 사이트" 또는 "이 사이트는 해킹되었을 수 있습니다" 같은 경고가 표시되며 사이트가 블랙리스트에 오르게 됩니다. 고객과 커뮤니티로부터 신뢰도 잃게 되죠.

가장 심각한 문제는 무엇일까요? 이 익명의 해커는 여러분이 아무 대응도 하지 못할 것이라고 생각한다는 점입니다.

사이트에는 이상한 팝업, 강제 리디렉션, 스팸성 키워드, 403 오류 등이 나타나기 시작합니다.

저희는 10년 넘게 수백만 개의 워드프레스 사이트를 다루며 이러한 해킹 사례를 수없이 목격해 왔습니다. 수백 개의 웹사이트에서 SQL 인젝션 악성코드가 더 큰 피해를 입히기 전에 제거하는 것을 도왔습니다.

이 글에서는 이러한 해킹을 제거하고 사이트를 최대한 빨리 원래 상태로 복구하는 방법을 알려드립니다.

요약(TL;DR): 사이트에서 SQL 인젝션을 제거하려면 MalCare를 설치하세요. 60초 이내에 웹사이트를 청소할 수 있으며, 이후 MalCare의 보안 강화 기능으로 사이트를 보강하면 향후 SQL 인젝션 공격으로부터 사이트를 보호할 수 있습니다.

SQL 인젝션 공격이란?

워드프레스 웹사이트는 게시글, 페이지, 댓글 등의 데이터를 데이터베이스로 관리합니다. 이 모든 데이터는 데이터베이스 테이블에 체계적으로 저장됩니다.

해커는 SQL 인젝션 공격을 통해 이 데이터베이스에 접근합니다.

그런데 누군가 왜 여러분의 데이터베이스에 접근하려 할까요?

좋은 질문입니다. 해커가 웹사이트에 침입하는 목적은 두 가지입니다. 민감한 정보(로그인 정보, 신용카드 정보 등)를 훔치거나, 아니면 사이트 자체를 파괴하는 것입니다.

데이터 탈취가 목적이라면 In-band SQL 인젝션, 데이터베이스 콘텐츠 삭제로 사이트를 손상시키는 것이 목적이라면 Blind SQL 인젝션 공격이라고 부릅니다.

왜 'SQL 인젝션'이라고 부르는 걸까요?

웹사이트가 데이터베이스에 데이터를 저장하려면 데이터베이스와 상호작용할 수 있어야 합니다. SQL은 사이트가 데이터베이스에 데이터를 추가, 수정, 삭제, 검색할 때 사용하는 언어입니다. 해커들은 바로 이 언어를 이용해 데이터베이스를 해킹하려 합니다.

구체적으로는 연락처 폼이나 검색창 같은 입력 필드를 악용하여 악성 스크립트를 데이터베이스에 주입(inject)합니다. 그래서 'SQL 인젝션(주입) 공격'이라 불리는 것입니다.

워드프레스 사이트에서 SQL 인젝션 제거하는 방법

다음과 같은 증상을 겪고 계신가요?

  • 연락처 폼으로 몇 분 만에 수백 통의 이메일이 들어온다.
  • 광고가 의심스러운 웹사이트로 리디렉션된다.
  • 일부 페이지에는 이상한 팝업이 나타나고 다른 페이지에는 오류가 발생한다.

이것들은 SQL 인젝션 해킹의 전형적인 증상입니다.

다만 이런 유형의 해킹은 겉으로 드러나지 않을 수도 있습니다. 해커는 단순히 정보만 훔치기 위해 사이트를 해킹했을 수도 있으며, 이 경우 사이트를 수정할 필요가 없기 때문입니다.

즉, 사이트가 멀쩡해 보여도 이미 해킹당했을 가능성이 있습니다. 확실히 알려면 스캔을 진행해야 합니다.

시중에 스캐너는 많지만, 상당수 플러그인은 새롭거나 복잡하거나 깊숙이 숨겨진 악성코드를 탐지하지 못합니다. 저희는 MalCare를 추천하는데, 그 이유는 다음과 같습니다.

  • MalCare는 단순 패턴 매칭이 아닌 코드의 동작을 분석하는 지능형 시그널을 사용해 새롭고 복잡한 악성코드도 탐지합니다.
  • 워드프레스 파일뿐 아니라 데이터베이스까지 전부 스캔하여 어느 구석에 숨어 있는 악성코드도 찾아냅니다.
  • 자체 서버에서 스캔을 수행하므로 여러분의 웹사이트에 부하가 걸리지 않습니다.
  • 매일 자동으로 사이트를 스캔하며, 악성코드를 발견했을 때만 알림을 보냅니다.

MalCare로 해킹 탐지하기

1단계: MalCare 워드프레스 악성코드 스캐너에 가입하고, 플러그인을 설치·활성화한 뒤 사이트를 MalCare 대시보드에 추가하세요.

즉시 사이트 스캔이 시작됩니다. 해킹이 감지되면 알림을 받게 되며, 바로 같은 도구로 사이트를 정화할 수 있습니다.

많은 분들이 백업을 복원해서 감염을 없애려고 하는데, 이 방법은 효과가 없습니다. 백업 복원은 기존 파일만 교체할 뿐, 해커가 추가한 악성 파일은 제거하지 못합니다.

주의: 스캐너는 무료지만, MalCare의 악성코드 제거는 유료 기능입니다. 사이트를 정화하려면 업그레이드가 필요합니다.

해킹 정화하기

2단계: MalCare가 해킹을 감지하면 대시보드에 알림이 표시됩니다. 알림 바로 아래의 Auto-Clean 버튼을 클릭하세요.

3단계: FTP 계정 정보를 입력합니다. FTP 정보를 모르겠다면 호스팅 업체의 안내 문서나 영상을 참고하세요.

4단계: 워드프레스 사이트가 저장된 폴더를 선택합니다. 일반적으로 public_html 폴더입니다. 클라이언트 사이트를 관리하는 경우, 사이트가 실제로 public_html에 위치해 있는지 미리 확인하는 것이 좋습니다.

폴더를 선택하면 MalCare가 사이트 정화를 시작하며, 몇 분 안에 악성코드를 제거합니다.

MalCare 외에도 Wordfence, WebARX Security, Astra Security, Sucuri 등 다양한 보안 플러그인이 있으니 직접 비교해 보는 것도 좋습니다.

워드프레스는 SQL 공격을 어떻게 처리할까?

워드프레스는 오랜 기간 SQL 인젝션 공격으로부터 데이터베이스를 보호하기 위해 많은 노력을 해왔습니다.

이러한 공격으로부터 사이트를 지키려면 입력 필드가 데이터베이스에 값을 저장하기 전에 반드시 사용자 입력값을 검증해야 합니다.

워드프레스에는 입력 데이터를 살균(sanitize)하는 함수 목록이 내장되어 있어, 코어만 놓고 보면 악성 스크립트가 삽입되기 어렵습니다.

그러나 워드프레스 사이트는 테마와 플러그인에 크게 의존합니다. SQL 인젝션은 대부분 취약한 테마와 플러그인을 통해 이루어집니다.

SQL 인젝션 공격은 어떻게 실행될까?

해커는 사이트에 존재하는 취약점을 악용해 접근합니다. SQL 인젝션의 경우 연락처 폼, 로그인 박스, 회원가입 양식, 댓글 섹션, 검색창 같은 입력 필드의 취약점을 이용해 악성 PHP 스크립트를 데이터베이스에 삽입합니다.

그렇다면 입력 필드 자체가 위험하다는 뜻일까요?

답은 예스이자 노입니다.

댓글이나 연락처 폼 같은 입력 필드는 플러그인이나 테마로 구동됩니다. 다른 소프트웨어와 마찬가지로 플러그인과 테마에도 취약점이 생길 수 있고, 해커는 이를 악용해 SQL 인젝션 공격을 실행합니다.

모든 플러그인과 테마가 워드프레스의 보안 기준을 준수하는지 일일이 확인하는 것은 불가능합니다.

폼 플러그인을 예로 들어보겠습니다. 폼에 입력된 정보는 데이터베이스에 저장되기 전에 반드시 유효성 검증과 데이터 살균 과정을 거쳐야 합니다.

데이터 유효성 검증(Data Validation): 데이터가 특정 형식으로 입력되었는지 확인합니다. 예를 들어 전화번호를 받는 폼이라면 방문자가 숫자만 입력했는지 확인해야 합니다.

데이터 살균(Data Sanitization): 필요한 범위를 초과하는 입력을 차단합니다. 폼 플러그인은 방문자가 10자를 초과해 입력하지 못하도록 제한해야 합니다.

플러그인이 사용자 입력을 제대로 검사하지 않으면 악성 코드 문자열을 폼에 삽입하기 쉬워지고, 폼은 그대로 데이터베이스에 저장하므로 해커에게 데이터베이스 접근권을 넘겨주는 꼴이 됩니다.

대부분의 워드프레스 사용자는 설치된 플러그인이나 테마가 사용자 입력을 제대로 필터링하는지 알 방법이 없습니다. 다행히 재감염을 막는 방법은 따로 있습니다. 아래 예방 섹션을 참고하세요.

SQL 인젝션 공격이 사이트에 미치는 영향

SQL 인젝션 공격이 성공하면 그 결과는 처참합니다. 다음과 같은 피해를 입을 수 있습니다.

1. 민감한 데이터 유출

야후, 트위터, 어도비 등의 대규모 데이터 유출로 수백만 개 계정이 노출된 뉴스를 들어보셨을 것입니다.

여러분의 사이트가 트위터만큼 크지 않더라도 민감한 정보를 담고 있다면, 유출 시 신뢰 붕괴, 평판 훼손, 심지어 법적 문제로 이어질 수 있습니다.

전자상거래 사이트는 금융 기록이, 의료 사이트는 건강 기록이 도난당할 수 있습니다. 해커는 이 정보를 온라인에 판매하거나 몸값을 요구하기도 합니다.

2. 웹사이트 데이터 손실

사이트를 침입한 해커가 가장 두려워하는 것은 들키는 일입니다. 그래서 조용히 활동하지만, 때로는 데이터베이스를 수정하다가 실수로 정보를 삭제하거나, 아예 사이트 파괴를 목적으로 데이터를 지우기도 합니다. 그 결과 웹사이트 콘텐츠를 잃게 됩니다.

3. 신뢰 붕괴와 평판 훼손

데이터 유출은 고객이 여러분의 비즈니스를 어떻게 바라보는지에 큰 영향을 줍니다. 2018년 캠브리지 애널리티카 스캔들 당시 많은 사람들이 페이스북 계정을 삭제하기도 했습니다.

고객의 건강 정보나 금융 정보를 제대로 보호하지 못했다는 사실을 알게 되면, 고객은 다시는 거래하고 싶어 하지 않을 것입니다. 데이터 유출에 대한 법적 책임까지 물어질 수 있으며, 이는 평판에 큰 흠이 됩니다.

4. 구글 블랙리스트 등재 및 호스팅 중단

해커는 들키지 않으려고 은밀하게 활동하기 때문에 해킹의 눈에 띄는 징후가 없는 경우가 많고, 사이트가 해킹당했다는 사실을 알아차리는 데 시간이 걸릴 수 있습니다.

검색 엔진과 호스팅 서버는 워드프레스 사이트의 악성 활동을 빠르게 감지하며, 발견되면 자신들의 사용자를 보호하기 위해 즉시 사이트를 차단하거나 중단시킵니다.

5. 정화 비용

해킹당한 사이트를 복구하는 일은 결코 쉽지 않으며, 수작업으로는 불가능합니다. 전문 복구 업체에 의뢰할 수 있지만 비용과 시간이 많이 듭니다. 반복적으로 감염된다면 감당하기 힘든 청구서가 쌓이겠죠.

다행히 MalCare 같은 보안 서비스는 연간 $99로 단일 사이트 무제한 정화를 제공합니다.

재감염을 막는 방법

사이트가 해킹당한 원인은 대개 플러그인이나 테마의 취약점입니다. 사이트를 정화한 후에는 재감염을 막기 위한 조치를 반드시 취해야 합니다.

1. 테마와 플러그인을 신중하게 선택하기

테마나 플러그인을 설치하기 전에 반드시 사용자 리뷰를 확인하세요. 취약점으로 인해 여러 사이트가 해킹당한 이력이 있는 도구라면 사용하지 않는 것이 좋습니다. 잘 만들어진 도구는 취약점이 자주 생기지 않으며, 설령 발생하더라도 책임감 있는 개발팀이 빠르게 패치를 배포합니다.

2. 웹사이트 항상 최신 상태로 유지하기

SQL 인젝션 공격이 성공하는 이유는 테마, 플러그인 또는 코어에 존재하는 취약점 때문입니다. 개발자는 취약점을 알게 되면 업데이트 형태로 패치를 배포하며, 이를 적용하면 사이트가 안전해집니다. 테마와 플러그인, 코어까지 항상 최신 버전을 유지하는 것이 중요합니다.

전문가 팁: 워드프레스 자동 업데이트를 반드시 활성화하세요. 2017년 워드프레스가 SQL 취약점을 패치한 업데이트를 출시했음에도, 자동 업데이트가 꺼져 있던 수많은 사이트가 해킹당했습니다.

3. 데이터베이스 테이블 접두사 변경하기

기본 테이블 접두사를 변경하면 해커가 데이터베이스에 접근하기 더 어려워집니다. 워드프레스 데이터베이스 테이블은 기본적으로 "wp_"로 시작하는데, 이 접두사를 바꾸면 테이블을 찾기가 한층 어려워집니다.

전문가 팁: 작업 전 반드시 사이트 백업을 먼저 받으세요. 이 단계는 절대 건너뛰지 마세요. 사이트 백엔드를 수정하는 작업은 위험하며, 문제가 생겼을 때 복구할 수 있는 사본이 필요합니다.

  • 호스팅 계정에 로그인해 wp-config 파일에 접근합니다.
  • cPanel > 파일 관리자(File Manager)로 이동합니다.
  • wp-config.php 파일을 찾아 열람합니다.
  • $table_prefix = 'wp_'; 구문에서 wp_를 다른 값으로 변경한 후 저장하고 종료합니다.

4. 방화벽 사용하기

방화벽은 워드프레스 사이트를 해커로부터 보호합니다. 사이트 방문자를 검사하여 악성 활동 이력이 있는 방문자를 차단합니다. Astra Security 같은 방화벽은 사용자 입력을 분석해 SQL 인젝션 공격을 탐지하고 차단합니다.

MalCare로 사이트를 정화했다면 방화벽 플러그인을 별도로 설치할 필요가 없습니다. MalCare 방화벽이 악성 트래픽을 자동으로 차단해 줍니다.

다음은 무엇을 해야 할까?

워드프레스 사이트는 데이터베이스와 여러 파일로 구성됩니다. 데이터베이스뿐 아니라 워드프레스 파일 역시 해킹에 취약합니다. 해커와 봇으로부터 파일을 보호하는 조치도 함께 취해야 합니다.

여러 보안 조치 중에서 절대 빼놓으면 안 되는 것은 보안 플러그인 사용입니다. MalCare 같은 보안 플러그인은 매일 사이트를 스캔하고, 해킹이 발견되면 즉시 알려주며, 60초 이내에 정화를 도와주고, 향후 해킹 공격으로부터 사이트를 보호해 줍니다.

MalCare 보안 플러그인으로 24시간 내내 사이트를 지키세요