본문 바로가기

Security Indicator/Insight

홈페이지 해킹, 악순환의 고리를 끊어라 ( SQL Injection) - p4ssion

- 보안뉴스에 기고한 컬럼입니다. 다른 컬럼들도 계속 연이어 나올 예정입니다. 

 

SQL Injection에 관련된 글을 쓰기 시작한지가 벌써 6년이 지났음에도 불구하고 현재의 문제는 해결될 기미를 보이지 않고 있다. 현재는 더 세계적으로 확산이 되고 있고 문제가 커지고 있는 양상이다. 중요한 사실로 언론 지상에 보도되었던 50만대 가량의 웹서버 (정확하게는 DB 서버의 권한이 획득 당하여 웹서버의 소스코드가 변조된 케이스를 의미한다. ) 감염 이슈는 사실상 일상적인 일이 되어 버렸다.

 

산술적으로 하나의 웹사이트에 5명의 사용자만 방문 한다 하여도 악성코드 유포의 기회는 250만개의 클라이언트에 영향을 미친다. 제로데이 (패치가 나오지 않은 취약성) 공격을 감행 할 경우 성공률은 대폭 높아지게 되고 50%의 성공률로만 잡아도 125만대의 PC를 이용하는 사용자 정보는 언제든지 유출 될 수 있는 상황에 직면해 있다. 모든 상황은 최소치로 잡았을 경우에도 이와 같다.

 

국외의 해킹사고들은 국내만을 피해서 발생 할까? 그렇지 않다. 외면되고 알려지지 않는 많은 사건사고들은 조용하게 수습이 되고 언제 그랬냐는 듯이 사라진다. 근본 문제는 해결 되지 않은 상태에서 단순한 배포 링크만을 제거하는 것으로 문제를 쉽게 해결 했다고 한다.

 

지금의 공격은 오로지 금융정보의 유출과 게임 관련된 사용자 정보의 유출에 목적을 두고 있다. 환금성이 있으며 실질적인 이득을 얻을 수 있기 때문에 타켓팅 된 것이다. 해외의 경우에는 온라인 게임 뿐 아니라 금융 관련된 정보들도 손쉽게 획득 할 수 있도록 공격코드가 구성이 되어 있다. 국내의 경우는 금융 관련된 정보보다 온라인 게임의 사용자 계정 정보가 대부분을 차지하는 것이 다를 뿐이다. 가끔 눈 먼 공격툴이 전세계의 웹서버를 공격하여 국내의 게임 계정을 얻기 위한 코드를 설치하는 일도 비일비재하게 일어난다.

 

알려지지 않는 많은 위험들은 이제 실제화 되어 세상에 드러나있고 공격자들은 보다 자연스럽게 공격을 하고 있다. 대규모 해킹이 발생되면 언제나 그렇듯이 전세계의 백신회사들은 바빠진다. 해당 공격 도구의 패턴을 분석하고 업데이트 하느라 분.초를 다투며 대응을 한다. 언제까지 이럴 수 있을까? 지금의 공격도 소수의 공격자가 운용하는 자동화된 공격도구에 의해 발생 되지만 대응은 수천. 수만 명의 전문인력이 전세계적으로 대응해야 하는 비효율적인 양상의 극치를 달리고 있다.  공격자들은 자유자재로 공격코드를 변경한다. 새로운 공격 가능한 취약성이 나온다면 바로 다음날쯤이면 전 세계의 취약한 웹서비스를 통해 악성코드들은 유포가 된다. 가히 리얼타임이라고 하지 않을 수 없다.

 

효율적인 악성코드 설치 매커니즘을 일찌감치 획득한 공격자들은 보다 자동화 되고 효율적인 공격 방법들을 모색하고 있다. asprox라고 불리는 웹으로 유포되는 봇넷의 경우에도 asp+mssql 조합만을 공격 하였으나 확대는 시간 문제라고 볼 수 있다. 그때에는 감당하기 어렵고 대응할 여력조차 없는 상황에 직면 할 수 밖에 없다. 그 시간은 이제 너무나도 가까워져 있다. 근본적인 대응책도 고민을 하지 못하고 논의 되지 못하는 지금의 현실에서 공격도구의 대상 확대는 재앙 같은 의미를 지닌다.

 

일반적인 대응 흐름

 

일반적인 SQL Injection에 관련된 설명이라면 전문가들에게는 식상할 것이고 개발자들 조차도 이젠 심심치 않게 들어본 내용이 될 것이다. 매번 악성코드 유포에 따른 대응은 언론 지상에서 발표가 된다. 국내의 악성코드 대응 흐름은 너무나도 간단 명료하다. 기본 전제는 사건이 있어야 대응을 한다는 점이다.  사건이 발생 하지 않으면 그 어떤 것도 비용으로 분류가 되며 행동이 발생 되지 않는다.

 

대표적인 악성코드 유포에 따른 대응 흐름을 간략히 보면 다음과 같다.

 

1.     신규 공격코드를 이용해 SQL Injection 자동화 공격도구로 취약한 웹 서비스들에 대해 직접적인 공격이 발생 된다.

2.     웹 서비스를 통해 악성코드가 유포된다.

 

A.     유관기관에서는 악성코드 신고 접수 시에 악성코드 유포하는 도메인에 대한 차단을 진행한다.

B.      백신업체에서는 악성코드의 패턴을 이용해 대응하는 백신을 제작하거나 업데이트 한다.

C.      신규 취약성을 이용할 경우에는 패치를 설치 하라고 언급이 되고 패치가 나오지 않을 경우에는 그냥 기다린다.

D.     악성코드가 웹을 통해 감염이 되고 주변 네트워크로도 확산이 되는 것과 같은 특이한 상황의 경우 별도의 방안들을 강구하도록 한다.  ( ARP Spoofing)

 

3.     악성코드의 변형이 유포 될 경우 – 2번 항에 있는 A,B,C 항목은 계속 반복이 된다.

 


여기서 1번 항목은 일반에게 잘 알려지지 않는다. 2번 항목에 대한 내용들만 계속 루프를 돌 뿐이다. 대책으로는 모두 사용자 PC의 안정성을 탓하거나 패치부족, 계정관리의 문제들만을 언급할 뿐이다. 과연 이것만으로 지금의 문제를 정리 할 수 있을까?

 

무언가 빠진 것 같지 않은가?.

진짜 문제는 악성코드가 유포 될 수 있도록 취약성을 간직한 웹서비스들 임에도 대책은 부실하다.

어떤 문제로 인해 공격을 당하는 것은 전문가나 일정 수준에 도달한 사람들이라면 모두 숙지하고 있다. 중요한 것은 어디에 문제가 있느냐 하는 것이다. 어디에서 어떤 부분을 어떻게 해야 하는 모든 과정은 지금 생략 되어 있다.

 

여러 가지 대응 서비스들이 있으나 확산의 한계가 존재하고 비용 문제 또한 만만치 않다. 여기서의 비용은 여러 가지 비용을 산정 할 수 있다. 소스코드의 대폭적인 개선과 보안기능이 강화된 템플릿의 활용, 보안진단 인력, 진단도구의 활용, 웹 보안 도구의 도입 모두 상당한 비용을 수반 할 수 밖에 없다. 일시적인 비용 이외에 지속적인 관리비용 또한 만만치 않게 소요된다. 또 이런 비용과 서비스를 이용해서 보안성을 높인다 하여도 웹 소스코드가 변화 없이 그대로 있었던 경우가 있는가? 매번 변화되고 짧게는 하루에 몇 번, 길게는 몇 달에 한번씩이라도 웹 서비스는 개선이 되고 코드가 갱신된다. 문제는 다시 시작이 된다. 비용대비 효율이라는 측면에서 답이 나오지 않는 해결책이 계속 될 수 밖에 없다.

 

문제의 핵심을 보라

 

악성코드의 변종은 날마다 최대치를 갱신한다. 만약 탐지 건수로만 따진다면 매년마다 신기록을 넘어서고 있을 것이다. 동일한 악성코드가 전 세계에서 발견이 되고 그 숫자는 가공할 만큼의 수치가 발견 될 수 밖에 없다. 왜 이렇게 확산이 되고 범위가 넓혀지는가에 대해 고민을 하고 방안을 마련해야 한다. 그러나 현실은 난감한 상황이다.

 

자유로운 공격자들의 공격에 단순한 대응만으로도 허덕일 지경이니 원인제거를 위한 활동은 단순한 허언에 지나지 않는다. 원인제거 없는 단순한 대응은 보안분야뿐 아니라 IT 생태계 자체가 심각하게 교란되고 혼란해 질 수 밖에 없는 상황으로 점점 더 빨리 달려갈 뿐이다.

 

문제의 핵심은 입력값 검증에 대한 절차 준수와 입력값 검증을 손쉽게 확인 할 수 있는 도구나 서비스가 관건이 될 것이다. 도구나 서비스를 활용해 개발자들이 점진적으로 위험성을 제거해 가고 전체적인 서비스에 존재하는 문제들은 일률적으로 제거 할 수 있도록 가이드 되지 않는 한 이 문제는 인터넷이 사용되는 내내 계속 될 수 밖에 없는 문제이다. 시간 지나면 사라질 문제가 절대 아니다. 2010년 상반기를 결산하는 HP TopRisk Report를 보면 Network 단위에서 발생되는 공격의 80% 이상이 Web application을 노린 공격이다.

(http://dvlabs.tippingpoint.com/toprisks2010 )

공격의 측면은 두 가지로 진행이 되어 왔고 앞으로도 진행 될 것이다.

 

1. 전파를 위한 도구의 고도화 및 확장 ( Mass sql injection tool – MSSQL, Oracle, Mysql)

2. 클라이언트 침입을 위한 다양한 어플리케이션의 제로데이 발견 ( IE, FF, Safari, Flash, PDF …)


우리는 지금 1번에 대한 대응은 생각도 못한 상태에서 클라이언트 침입을 확인 할 수 있는 최소한의 도구만을 지녔을 뿐이다. 물론 이마저도 없는 나라들도 부지기수 이지만

도구가 활용되는 통로를 어떻게 최소화 하고 줄일 수 있느냐에 따라 제로데이의 영향력도 축소가 될 것이다.

 

지금과 같은 대응이라면 매일매일 동일한 대응의 지루한 반복만이 계속 될 뿐이며 나갈 수 있는 정보들은 모두 빠져나가고 악의적으로 활용 될 수 밖에 없으며 결국 서비스 자체 뿐 아니라 서비스의 생태계에도 충분히 큰 영향을 줄 것이다.

 

이미 오래 전 예상된 바이고 이젠 그 결과를 모든 사용자가 간접적으로 느낄 수 밖에 없을 것이다. 문제 발견 이후의 클라이언트에 설치된 어플리케이션의 패치들은 이제 빠른 확산 도구를 갖추고 있는 상태에서 매번 소 잃고 외양간 고치는 것이 반복 될 수 밖에 없다.  빠른 확산 도구인 웹 어플리케이션의 취약성을 각 개별 사이트 마다 찾아서 보완을 하지 않는다면 이 도구는 계속해서 확장하여 종래에는 감당하기 어려운 상황으로 갈 수 있다. 

 

이젠 전략적이며 적극적으로 웹어플리케이션에 존재하는 문제들을 제거하고 보완 할 수 있는 지속적인 방법과 도구를 찾고 활용 함으로써 늦었지만 근본 대응을 모색 할 때이다. 전 세계적으로..

 

-       바다란 세상 가장 낮은 곳의 또 다른 이름

 

* 여기에서의 웹 어플리케이션은 개발자가 다양한 언어 ( asp ,php ,jsp, aspx )를 활용하여 목적에 맞도록 Database와 연결 하고 그 결과를 사용자에게 보여주는 홈페이지를 의미한다. 대부분의 기업 및 서비스 홈페이지가 그 범주에 해당된다.

 

Sql injection 에 대한 설명들은 필자 블로그의 컬럼들을 참조.

Mass sql injection 대응과 현실 - http://p4ssion.com/200
SQL Injection
공격 변화 - http://p4ssion.com/207