본문 바로가기

Security Indicator/Insight

중국으로 부터의 침입 ( 차단과 대응)

2005년 5월 경부터 중국으로 부터의 침입이 급증하고 있다. -본 글은 2005년 5월에 작성한 내용입니다.

 

해당 하는 침입의 유형을 살펴보면 인자 단위의 SQL Injection이 주된 침입 방법이며 그외의 공격 유형은 이전 부터 알려진 잡다한 방법들을 거의 다 동원하고 있다.

 

 

특징을 살펴보면..

 

*인자 단위의 SQL Injection Attack

각 웹 URL의 인자 각각에 대해 DB 쿼리 시도시에 인자에 대해 특수 문자 및 길이에 대한 제한을 제대로 코딩하지 않음으로 인해 DB에 명령이 전달이 되는 문제가 있다.

 

또한 사용자의 브라우저에는 HTTP 500 에러가 발생하지만 Raw Traffic 상에서는 dB의 결과값이 전달이 되어 온다. 즉 DB에서 실행된 결과값이 웹 서버로 리턴이 되지만. HTML 상으로는 웹서버에서 이해할 수 없어서 문제가 발생한다는 500 에러 메시지가 디스플레이 된다.

 

사용자가 보는 것은 Internal server error 와 같은 문장을 보지만 실제 Raw Traffic 상에서는 결과값이 리턴이 되는 것이다.

 

* 자동화된 툴을 이용한 직접공격

기본적으로 SQL Injection 공격을 수행하며 수행된 기법은 일반적으로 알려진 Blind SQL Injection을 이용합니다. DB 계정 및 접속 권한의 획득에는 SQL Injection이 이용이 되며 이후 시스템에 명령을 내리거나 파일의 업로드등을 하기 위해서 DB 서버의 Stored Procedure를 사용한다.

자동화된 툴에서는 수작업으로 진행 해야 했던 위의 모든 과정을 일괄적으로 처리하는 툴이며 툴의 운용시에는 웹서버에 다량의 웹로그가 발생이 된다.  SQL Injection 공격을 수행하는 툴은 상당히 여러종류이며 매우 다양한 형태의  툴이 개발되어져서 중국내의 공격조직에 판매가 되고 있고 악의적으로 사용하는 그룹에 판매가 되고 있어서 널리 사용되고 있다.

 

* 지능적인 시스템 침입

DB서버에 접속이 가능한 상태이라 시스템에 제한적인 작업 및 Db 서버에 악의적인 행동을 할 수 있음에도 불구하고 웹페이지에 사용자 단위의 감염을 유도하는 악성코드만을 삽입한다. 즉 침입의 목적은 해당 서버의 권한 획득이 아니라 일반 인터넷 유저의 정보 획득이 목적이다. 그러므로 대부분의 관리자들이 알아채기가 상당히 어려운 상태이다. 모든 서버의 웹 로그를 볼 수가 없는 상태이고 공격을 모니터링 하지 못하다 보니 사용자 단위의 신고를 통해서만 파악을 할 수 있는 상태이다. 수동적인 대처외에는 수행을 하지 못한다.

 

일단 공격 성공후에는 악성코드를 심는 것 이외에 웹 상에 여러개의 백도어들을 생성한다. 웹 백도어외에 시스템 백도어도 신형으로 다수를 설치하며 해당 백도어를 이용해 원격에서 제어를 손쉽게 하도록 한다. 웹 쉘을 통해 시스템의 설정 파일 및 중요 소스를 임의로 다운 받거나 수정할 수 있다.  시스템 백도어를 이용해서는 리버스 텔넷과 같은 유형으로 내부 서버 및 중요 서비스 영역(사설 IP로 보호) 에 대해 추가적인 공격을 수행한다.

 

*IP 차단에 대한 우회

 

실질적으로 공격이 다수 발생하는 IP 영역은 중국쪽 IP 대역으로 부터 일어나고 있으나 중국쪽 IP 대역을 차단할 경우 국내에 존재하는 다수의 취약서버 및 해외의 취약서버를 통해 우회공격을 시도한다. 우회공격을 이용할 시에는 탐지 기법의 향상과 웹 코드 상의 소스 수준을 높이는 것 외에는 대안이 없다.

 

 

자..위와 같은 유형들의 공격이 일반적으로 발생하고 있다. 또한 공격 기법도 난이도가 높아 졌으며 더욱 위험한 것은 자동화 되어 있다는 점이며 자동화된 공격툴의 사용 목적이 오로지 개인정보 획득을 통한 금전적 이득 취득이 가장 큰 목적으로 되어 있다. 

 

위험한 시기이며 지켜야 할 것이 많은 우리로서는 매우 어렵고 긴 싸움이 될 것으로 보인다.

 

대책으로는 다음과 같다.

 

1.  DB 단위의 대책

현재는 MSSQL에 대한 공격만이 자동화 되어 있으나 Oracle 및 Mysql 에 대한 공격도 머지않아 자동화 될 것으로 예상이된다. 그리고 MSSQL에서는 사용하지 않는 Stored Procedure의 삭제를 권한다.

   xp_cmdshell
   xp_dirtree
   xp_regdeletekey
   xp_regenumvalues
   xp_regread
   xp_regwrite
   sp_makewebtask
   sp_adduser ...등등

또한 DB 쿼리를 사용하기 위해 웹에서 호출을 시행하는 DB 계정의 경우 DML 권한만을 주고 DDL 권한을 주지 않거나 Stored Procedure의 호출 권한을 제거한다. 비단 MS-SQL에만 해당하는 것이 아니라 전체 DB에서도 해당 부분이 고려 되어야 할 것이다.

 

2. 소스 단위의 대책

인자단위의 체크를 강화한다.

(' , <,>,; ,--) 문자들과 같은 특수문자들의 인자값에 포함되지 않도록 필터링 한다.

즉 DB 쿼리시에 사용되는 모든 변수들에 대해 다음과 같은 처리가 되어야 한다.

  - single quote 하나를 single quote 두 개로 replace하거나 \' replace
    data = replace(data, "'", "''")
또는
    data = replace(data, "'", "\'")

  - semi colon
double dash 제거
    data = replace(data, ";", "")
    data = replace(data, "--", "")

등등.. 각 웹 언어 별로 해당하는 처리가 선별 되어 진행이 되어야 한다.

또한 인자의 길이를 반드시 확인 하여야 한다. 특수 문자가 없이 And 문을 붙여 쿼리를 수행하는 것도 기본 공격 유형이므로 인자당 해당하는 길이를 적정정도 예상하여 이후의 문장은 버리거나 하는 것이 매우 중요하다.

 

 

3. 네트웍 차원의 침입 탐지

 

IS_SRVROLEMEMBER , IS_MEMBER('db_owner') , db_name()  ,%5Bsysobjects%5D 와 같은 문자열을 웹 Request 문자열에서  탐지 하도록 IDS에 룰셋을 설정한 이후 해당 패턴이 감지 될 시 차단을 수행하면 네트웍 차원의 대책에 도움이 될 수 있다.

 

 

이상과 같이 공격 현황 및 대책을 분리할 수 있다.