웹사이트에 대한 SQL 인젝션(SQL Injection) 공격이 걱정되시나요? 이 글을 읽고 계신다면 이미 이 공격이 얼마나 치명적인지 알고 계실 겁니다. 이 가이드에서는 SQL 인젝션 공격을 쉽게 예방할 수 있는 실질적인 방법들을 자세히 소개해 드립니다.
SQL 인젝션은 해커가 워드프레스 사이트를 탈취하고 관리자 권한까지 넘볼 수 있게 만드는 위험한 공격입니다. 일단 사이트를 장악당하면 트래픽이 다른 곳으로 우회되거나, 기밀 데이터가 유출되고, 스팸 링크가 삽입되며, 검색 결과가 조작되거나 불법 제품 광고가 노출될 수 있습니다. 이런 공격은 사이트와 비즈니스에 되돌릴 수 없는 피해를 남길 수 있습니다.
다행히도 올바른 보안 조치만 취하면 SQL 인젝션은 충분히 예방 가능합니다. 이 글에서는 SQL 인젝션이 무엇인지 살펴보고, 워드프레스 웹사이트를 안전하게 지키기 위한 효과적인 대응 방안을 깊이 있게 다뤄보겠습니다.
핵심 요약(TL;DR): 신뢰할 수 있는 보안 플러그인만 설치해도 워드프레스 사이트의 SQL 인젝션을 예방할 수 있습니다. MalCare를 설치하면 플러그인이 자동으로 사이트를 스캔하고 이러한 공격으로부터 사이트를 방어합니다.
SQL 인젝션 공격이란?
모든 워드프레스 사이트에는 방문자가 정보를 입력할 수 있는 영역이 존재합니다. 예를 들면 사이트 검색창, 문의 폼, 로그인 폼 등입니다.
문의 폼에서 방문자는 이름, 전화번호, 이메일 같은 개인 정보를 입력한 뒤 사이트로 전송합니다.
이렇게 입력된 데이터는 웹사이트의 MySQL 데이터베이스로 전송되어 처리 및 저장됩니다.
문제는 이 입력 필드들이 적절하게 설정되어 있어야 한다는 점입니다. 즉, 데이터베이스에 저장되기 전에 반드시 검증(Validation)과 살균(Sanitize) 과정을 거쳐야 합니다. 예를 들어 문의 폼의 이름 필드는 문자와 숫자만 받아야 하며, 특수 기호는 받지 않는 것이 이상적입니다. 그런데 사이트가 어떤 데이터든 그대로 받아들인다면, 해커는 이를 역이용해 다음과 같은 악성 SQL 쿼리를 삽입할 수 있습니다.
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
악성 스크립트가 데이터베이스에 저장되면, 해커는 이를 실행하여 웹사이트의 제어권을 확보합니다. 이후 SQL 인젝션을 활용해 사이트에 침입하고 고객을 기망하거나 방문자를 피싱 사이트로 유도하는 등 각종 악성 행위를 저지르게 됩니다.
따라서 웹사이트가 입력 필드의 데이터를 검증하지 않는다면, 그 사이트에는 SQL 인젝션 취약점이 있다고 볼 수 있습니다.
SQL 인젝션 공격은 어떻게 작동할까?
해커들은 보안이 취약하거나 허점이 있는 웹사이트를 표적으로 삼습니다. 경험상 플러그인과 테마에서 취약점이 발견되는 경우가 많으며, 해커들은 이 사실을 잘 알고 있습니다. 그들은 취약한 플러그인과 테마를 사용하는 사이트를 찾기 위해 끊임없이 인터넷을 뒤집니다.
구체적인 시나리오로 설명해 보겠습니다. A씨가 웹사이트 문의 페이지에 'Contact Form'이라는 플러그인을 사용하고 있다고 가정해 봅시다. 이 플러그인 2.4 버전에서 SQL 인젝션 취약점이 발견되었고, 개발자가 이를 수정해 2.4.1 버전을 출시했다고 합시다.
업데이트가 배포되면서 개발자는 수정 사유를 공개합니다. 즉, Contact Form 플러그인 2.4 버전에 보안 결함이 있다는 사실이 공개된 것이죠.
그런데 X씨는 업데이트할 시간이 없다는 이유로 몇 주간 업데이트 설치를 미루고 있습니다. 바로 여기서 문제가 시작됩니다.
해커들은 취약점 정보를 입수하면 인터넷을 크롤링하며 특정 버전의 플러그인이나 테마를 사용하는 웹사이트를 자동으로 찾아내는 프로그램이나 취약점 스캐너를 가동합니다.
이 경우 해커들은 Contact Form 2.4 버전을 사용하는 사이트를 찾아냅니다. 정확한 취약점을 알고 있기 때문에 공격은 한층 쉬워지고, 해커는 SQL 인젝션 결함을 악용해 사이트에 침입하게 됩니다.
SQL 인젝션의 종류
해커들이 사용하는 SQL 인젝션 공격은 크게 두 가지입니다.
1. 클래식 SQL 인젝션(Classic SQL Injection)
웹사이트에 접속하면 브라우저(크롬, 파이어폭스 등)는 웹 서버에 HTTP 요청을 보내 콘텐츠를 요청합니다. 웹 서버는 사이트의 데이터베이스에서 해당 콘텐츠를 가져와 브라우저로 되돌려주고, 그래야 우리가 웹사이트 화면을 볼 수 있습니다.
그런데 웹사이트의 데이터베이스에는 고객 정보, 결제 정보, 아이디와 비밀번호 같은 기밀 데이터까지 모두 저장되어 있습니다. 데이터베이스는 프론트엔드 데이터만 외부로 내보내도록 설정되어야 하며, 나머지 기밀 데이터는 철저히 보호되어야 합니다. 하지만 이런 보안 검증 절차가 갖춰져 있지 않으면 해커는 그 틈을 파고듭니다.
클래식 SQL 인젝션 공격에서 해커는 데이터베이스에 악성 요청을 보내 결과를 자신의 브라우저로 가져옵니다. 특히 쿼리 스트링(Query String)을 이용해 사이트 로그인 계정 같은 민감한 정보를 요청합니다. 이 정보가 제대로 보호되어 있지 않으면 해커에게 그대로 넘어가고, 결국 로그인 정보를 손에 넣은 해커는 사이트에 침입하게 됩니다.
2. 블라인드 SQL 인젝션(Blind SQL Injection)
블라인드 SQL 인젝션은 해커가 웹사이트의 입력 필드를 통해 악성 스크립트를 주입하는 방식입니다. 스크립트가 데이터베이스에 저장되면 해커는 이를 실행해 사이트 콘텐츠 변경, 심하면 데이터베이스 전체 삭제 등 각종 피해를 일으킵니다. 또한 악성 스크립트를 통해 관리자 권한까지 탈취할 수 있습니다.
두 공격 모두 웹사이트와 비즈니스에 치명적인 결과를 초래할 수 있습니다. 하지만 다행히도 올바른 보안 조치와 입력값 검증만 잘 갖추면 충분히 예방할 수 있습니다.
SQL 인젝션 공격 예방 단계
SQL 인젝션을 막으려면 먼저 웹사이트 보안 진단부터 시작해야 합니다. 예방 조치는 누구나 할 수 있는 간단한 방법과 다소 전문 지식이 필요한 기술적인 방법으로 나눌 수 있습니다.
간단한 예방 조치
- 보안 플러그인 설치하기
- 신뢰할 수 있는 테마와 플러그인만 사용하기
- 사이트에 있는 불법 복제 소프트웨어 삭제하기
- 비활성화된 테마와 플러그인 삭제하기
- 웹사이트 정기적으로 업데이트하기
기술적인 예방 조치
- 데이터베이스 기본 이름 변경하기
- 입력 필드와 데이터 전송 통제하기
- 워드프레스 하드닝(Hardening) 적용하기
그럼 하나씩 살펴보겠습니다.
SQL 인젝션 예방을 위한 간단한 조치
1. 보안 플러그인 설치하기
웹사이트 보호의 첫걸음은 보안 플러그인 활성화입니다. 워드프레스 보안 플러그인은 사이트를 상시 모니터링하며 해커의 침입을 차단합니다.
선택할 수 있는 플러그인은 많지만, 제공 기능을 기준으로 MalCare를 추천합니다. 이 플러그인은 자동으로 웹 애플리케이션 방화벽(WAF)을 구축해 공격으로부터 사이트를 방어하며, 해킹 시도를 감지하고 차단합니다.
또한 매일 사이트 전체를 꼼꼼히 스캔하여 의심스러운 동작이나 악성 활동이 감지되면 즉시 알림을 보냅니다. 덕분에 구글이 사이트를 블랙리스트에 등록하거나 호스팅 업체가 계정을 정지하기 전에 MalCare로 빠르게 문제를 해결할 수 있습니다.
2. 웹사이트 정기적으로 업데이트하기
앞선 예제에서 확인했듯이, 개발자는 보안 결함을 발견하면 이를 수정한 새 버전(보안 패치 포함)을 출시합니다. 취약점을 제거하려면 반드시 최신 버전으로 업데이트해야 합니다.
일주일에 한 번 정도 시간을 내어 워드프레스 코어, 테마, 플러그인을 업데이트하는 습관을 들이는 것을 권장합니다.
특히 보안 업데이트가 배포되었다면 즉시 설치하세요.
3. 신뢰할 수 있는 테마와 플러그인만 사용하기
워드프레스가 가장 인기 있는 웹사이트 제작 플랫폼이 된 데에는 다양한 플러그인과 테마 덕분이라는 점이 큽니다. 하지만 수많은 테마와 플러그인 중에서 신중하게 선택해야 합니다. 활성 설치 수, 마지막 업데이트 날짜, 호환 테스트 버전 등 세부 정보를 꼼꼼히 확인하세요.
가급적 워드프레스 공식 저장소에서 다운로드하는 것을 권장합니다. 다른 출처의 테마와 플러그인을 사용한다면 신뢰할 수 있는지 충분히 조사해야 합니다. 일부 서드파티 테마와 플러그인은 해커가 악의적으로 제작한 것일 수도 있고, 열악한 코드 품질로 인해 취약점이 존재할 수도 있습니다.
4. 불법 복제 소프트웨어 삭제하기
불법 복제(Nulled) 테마와 플러그인은 프리미엄 기능을 무료로 쓸 수 있다는 점에서 유혹적입니다. 하지만 안타깝게도 이런 소프트웨어에는 대부분 멀웨어가 미리 심어져 있습니다. 해커들에게 불법 복제 소프트웨어는 멀웨어를 유포하기 가장 쉬운 통로입니다.
설치하는 순간 멀웨어가 활성화되어 사이트 전체가 감염됩니다. 이런 소프트웨어는 멀리하는 것이 최선입니다.
5. 비활성화된 테마와 플러그인 삭제하기
플러그인을 설치해 놓고 몇 년씩 잊고 지내는 경우가 흔합니다. 하지만 이런 습관은 사이트를 해커에게 노출시킵니다. 설치된 테마와 플러그인이 많을수록 취약점이 생길 확률이 높아지고, 해커가 그 틈을 노릴 기회도 늘어납니다.
실제로 사용하는 테마와 플러그인만 남기고 나머지는 삭제해 사이트를 더 안전하게 만드세요. 또한 기존 테마와 플러그인도 정기적으로 스캔하는 것이 좋습니다.
기술적인 예방 조치
이번 섹션의 조치들은 워드프레스 내부 동작에 대한 어느 정도 이해가 필요할 수 있습니다. 하지만 요즘은 이런 작업을 도와주는 플러그인도 있으니 너무 걱정하지 않아도 됩니다. 하나씩 쉽게 알아보겠습니다.
1. 데이터베이스 기본 테이블 이름 변경하기
워드프레스 사이트는 파일과 데이터베이스로 구성됩니다. 기본적으로 데이터베이스에는 11개의 테이블이 있으며, 각 테이블은 다양한 데이터와 설정값을 저장합니다. 이 테이블들은 'wp_'라는 접두어로 명명되므로 wp_options, wp_users, wp_meta 같은 이름을 갖습니다.
이 이름은 모든 워드프레스 사이트에서 동일하며 해커들도 이를 잘 알고 있습니다. 해커는 어떤 테이블에 어떤 데이터가 저장되는지 파악하고 있기 때문에, 악성 스크립트를 주입할 때 어디에 저장될지 정확히 알 수 있습니다. 간단한 방법만으로 SQL 명령을 실행해 악성 행위를 저지르는 것이죠.
하지만 테이블 이름을 변경하면 해커가 스크립트 위치를 찾기 어려워집니다. 데이터베이스에 SQL 코드를 주입하더라도 테이블 이름을 알아내지 못하는 거죠.
Change Table Prefix나 Brozzme 같은 플러그인을 사용하면 간편하게 처리할 수 있습니다. 플러그인을 설치하고 안내에 따라 진행하면 됩니다.
직접 wp-config 파일을 편집해 변경할 수도 있습니다. 단, 사소한 실수 하나가 데이터베이스 오류와 사이트 오작동으로 이어질 수 있으니 작업 전 반드시 백업하세요.
- 호스팅 계정 > cPanel > 파일 관리자(File Manager)로 이동합니다.
- public_html 폴더에 접근한 후 wp-config 파일을 우클릭합니다.
- '편집(Edit)'을 선택하고 "$table_prefix = 'wp_';" 코드를 찾습니다.
- 이를 "$table_prefix = 'test_';"로 교체합니다.
접두어는 원하는 값으로 자유롭게 지정할 수 있습니다. 여기서는 예시로 'test_'를 사용했습니다. 변경을 완료하면 해커는 더 이상 SQL 명령의 목표 지점을 찾을 수 없습니다.
2. 입력 필드와 데이터 전송 통제하기
웹사이트의 모든 입력 필드가 특정 형식의 데이터만 받도록 설정할 수 있습니다. 예를 들어 이름 필드는 숫자를 입력할 이유가 없으므로 문자만 허용해야 하고, 연락처 필드는 숫자만 받도록 하는 것이죠.
이때 사용자 입력을 살균(sanitize)해 주는 sanitize_text_field() 함수를 활용할 수 있습니다. 이러한 입력값 검증은 잘못되었거나 위험한 데이터가 시스템에 들어오는 것을 원천적으로 차단합니다.
3. 워드프레스 하드닝(Hardening) 적용하기
워드프레스 사이트를 SQL 인젝션으로부터 보호하는 가장 중요한 단계 중 하나입니다. 웹사이트 하드닝이란 무엇일까요?
워드프레스는 사이트 운영에 도움이 되는 다양한 기능을 제공하지만, 실제로 대부분의 사용자는 그중 일부만 활용합니다. WordPress.org 역시 사용하지 않는 기능은 비활성화하거나 제거할 것을 권장합니다. 해커가 시도할 수 있는 공격 지점이 줄어들어 공격 가능성 자체가 낮아지기 때문입니다.
대표적인 워드프레스 하드닝 조치는 다음과 같습니다.
- 파일 에디터 비활성화
- 플러그인 및 테마 설치 기능 비활성화
- 2단계 인증(2FA) 적용
- 로그인 시도 횟수 제한
- 워드프레스 보안 키와 솔트(Salt) 변경
- 알 수 없는 폴더에서의 PHP 실행 차단
이런 조치들은 MalCare 같은 플러그인을 사용하면 클릭 몇 번으로 간편하게 적용할 수 있습니다.
물론 워드프레스 하드닝 가이드를 참고해 직접 수동으로 적용할 수도 있습니다.
여기까지가 SQL 인젝션 공격 예방 방법이었습니다. 이 가이드에서 소개한 조치들을 성실히 적용했다면, 사이트는 이미 한층 안전해졌을 것입니다.
마무리 thoughts: 예방이 최선의 방어입니다
치료보다 예방이 백배 낫습니다. SQL 인젝션 공격은 불필요한 스트레스와 막대한 재정적 부담을 안겨줍니다.
오늘 소개한 조치 대부분은 플러그인만으로도 손쉽게 적용할 수 있습니다. 기술에 익숙하지 않아도 걱정할 필요 없습니다. 누구나 자신의 사이트를 지킬 수 있습니다.
이러한 조치와 함께 MalCare를 활성화하는 것을 강력히 권장합니다. 강력한 방화벽이 공격으로부터 웹사이트를 능동적으로 방어하고, 매일 사이트를 스캔해 해킹 시도와 멀웨어를 점검합니다.
사이트를 24시간 감시하며 악의적인 침입자를 막아주는 든든한 보안 요원이라고 생각하면 됩니다. 사이트가 안전하게 보호되고 있다는 확신 속에서 안심하고 운영할 수 있습니다.
MalCare 보안 플러그인으로 해킹 공격을 미리 차단하세요!