'free software'에 해당되는 글 1건

Posted on 2008/09/08 15:36
Filed Under [1] IT 관련/5. Security

About Me...
Jae-Hun,Park (park_at_jaehun.org)
필자는 현재 프리렌서로 각 업체의 보안 세팅 및 리눅스 서버 관리를 도맡아 운영하고 있습니다.
KISA에 mod_security와 관련하여 직접 참여 하며, 여러가지 문서들과 룰셋들을 만들어 내었으며,
New21에서 활약과 미리내의 자동화 시스템에도 관여를 하여왔습니다. 현재는 중국에서 개인적인
일들과 관련하여, 보안 네트워크 시스템에 리눅스 시스템에 접목하는 방안을 설정하고 있습니다.

Mod_security?

mod_security란 아파치 웹서버에 모듈로써 기존 80포트에 들어오는 패킷을 검사하여, 정해진
룰셋을 통과하게끔 만들어진 모듈 프로그램입니다.

이는 모든 POST, GET 뿐만 아니라 HTTP1.1등과 같은 프로토콜까지도 세세히 검사를 할 수 있어
명령어를 치고 들어오는 웹과 관련된 크래킹을 방어 한다는 전제 하에 운영되고 있는 모듈입니다.

Mod_security Site : http://www.modsecurity.org
Mod_security rule set program : http://noeljackson.com/tools/modsecurity/

아래는 O'Reilly에서 나온 문서를 필자가 직접 번역한 내용입니다.

Mod_security를 소개합니다.
by [footnote]Ivan Ristic is a web security specialist and the author of of ModSecurity, an open source intrusion detection and prevention engine for web applications. He is the founder of Thinking Stone, which offers products and services related to web application security. Ivan spends his time thinking about web application security, web intrusion detection, and security patterns. Prior to moving to the computer security field, Ivan spent a number of years working as a developer, system architect, and technical director in the software development industry. Ivan wrote Apache Security for O'Reilly, a concise yet comprehensive web security guide for administrators, system architects, and programmers. An active participant in the web application security community, Ivan is a member of the Web Application Security Consortium, OASIS, and the PHP Security Consortium. [/footnote]Ivan Ristic
11/26/2003

공공 웹 어플리케이션들을 운영 하는 것은 러시아 룰렛을 하는 것처럼 보일지도 모릅니다.
웹에서 완벽한 보안을 이루는 것은 이론에 가능할 지라도, 실 생활에서는 항상 미약한 부분이 있습니다.
당신의 데이터에 공격자들은 오로지 접근을 하기 위한 코드를 생성하여 냅니다.

만약 당신이 운영하는 약간 복잡한 공공 웹 어플리케이션을 가지고 있다면, 보안 문제에 대한 몇 종류를
가지고 있는 것입니다.

이 URL을 예로 드십시오 :

만약 당신의 어플리케이션에 SQL 인젝션 취약점이 존재한다면, 위의 URL에서 보는 것과 같이 당신의
어플리케이션으로부터 모든 사용자 데이터들을 삭제할지도 모릅니다.

당신은 규칙적인 데이터 백업을 하고 있습니까?

다행히, mod_security 아파치 모듈은 위에 있는 공격 방식과 웹 공격의 다른 형태의 공격으로부터
보호를 해 주고 있습니다.


왜 mod_security를 당신이 사용해야 할까요?
1년 6개월 전에 , 저는 트래픽 모니터링을 하기 위하여 mod_security 대신 Snort를 사용하였습니다.
Snote를 사용한 것은 매우 잘 한 일이였습니다. 저는 Snort로 제가 원하는 문자들을 룰셋으로 설정하였고
매번 한번씩 저에게 데이터 스트림을 출력하며 경고하였습니다.

하지만 저의 경우 더 많은 데이터들을 원하였기 떄문에 Snort가 더 복잡한 HTTP 방식의 룰셋을
원하였습니다. 게다가, 웹 서버가 존재하는 곳에 IDS가 설치되도록 하는 것은 매우 시간이 걸리며,
가격도 비쌌기 때문입니다. 또한, 저는 mod_security와 mod_setenvif를 이용하여 다시 시도를 해
보았습니다. mod_rewrite는 공격을 방어하는 내용과 기존의 URL에서 다시 연결되는 클라이언트들에
대한 정보를 쉽게 찾아 낼 수 있었습니다. 하지만, 그것이 확실히 지식있는 공격자들을 지키지 못할 동안,
공격자들은 단순히 위와 같은 URL로 사이트를 공격할 수 있었으며, GET 대신 POST 방법을 이용하기도
하였습니다.

POST의 값은 변화 하지 않는 값으로 알고 있기때문에 대다수의 모듈에서는 통과 하고 이에 대한 공격은 쉽게 성공하게 되어있었습니다. 저는 새로운 프로그램을 만들면서 두번째 선택에 직면 하게 되었습니다.

1. 막대한 용량의 데이터를 처리 하는 방법
2. 아파치 모듈 생성 방법, 게이트웨이 방식, 프록시 방식
3. 자바로 가는 문제

그것에 대한 옵션은 많은 과업 및 극소수의 사람들이 사용하기 원할 때 결과를 요구하였습니다.
(이봐, 나는 어느쪽이든 그 프로그램도 사용하지 않을거야...)

저는 편하고 쓰기 쉬운 것을 만들기를 바랬기 떄문에 후자를 선택하게 되었습니다. 결코 뒤를 바라본 적은
없었습니다.

예제 URL로 돌아가서, mod_security에서 SQL 인젝션 공격인 "Drop table"을 막기 위하여, 아파치 설정에
아래와 같이 추가하면 됩니다.

SecFilter "drop[[:space:]]table"


설치와 설정(
Installation and Configuration)


Mod_Security를 설치하기 제일 좋은 방법은 소스로 컴파일 하는 것입니다.
(만일 당신이 Apache를 윈도우에서 돌리고 있다면, 웹사이트에서 미리 컴파일된 dll파일을
돌리시면 됩니다.)

$ /path/to/apache/bin/apxs -cia mod_security.c
# /path/to/apache/bin/apachectl stop
# /path/to/apache/bin/apachectl start

시작하기전에 당신은 새로운 룰셋 설정 파일이 필요할 것입니다.

<IfModule mod_security.c>
    # Turn the filtering engine On or Off
    SecFilterEngine On
   
    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On
   
    # Unicode encoding check
    SecFilterCheckUnicodeEncoding Off
   
    # Only allow bytes from this range
    SecFilterForceByteRange 0 255
   
    # Only log suspicious requests
    SecAuditEngine RelevantOnly
   
    # The name of the audit log file
    SecAuditLog logs/audit_log
    # Debug level set to a minimum
    SecFilterDebugLog logs/modsec_debug_log   
    SecFilterDebugLevel 0
   
    # Should mod_security inspect POST payloads
    SecFilterScanPOST On
   
    # By default log and deny suspicious requests
    # with HTTP status 500
    SecFilterDefaultAction "deny,log,status:500"
</IfModule>

저는 코드에 코멘트 다는 것을 하지 않았습니다. 아마도 그것은 설명을 정확하게 하는것일지도 모릅니다.
이 설정은 mod_security를 동작시킬 것입니다. 하지만, 이 설정에는 많이 넣지 않았습니다.
이것에 대하여 좋은 아이디어나 재 생성을 하는 것은 좋은 생각입니다.


그래서 이것은 무엇을 합니까? ( So What Does this Do? )

위의 설정으로 mod_security는 두가지를 제공합니다.
첫번째, 그것은 반회피 기법과 입력 기준을 수행 할 것입니다.
당신이 필터링 규칙을 설정하는 것을 시작할 때 이것은 나중에 도울 것입니다.
당신은 사람들이 서버에 ps 명령어에 옵션을 수행하는 것을 못하도록 설정 한 것을 상상해
보시기 바랍니다. /bin/ps ax는 약간의 정규식을 사용합니다. /bin//ps ax 나 /bin/ps%20ax
혹은 /bin/./ps ax는 명령어가 아니지만 단순하게 명령어로 동작됩니다.

여기에 mod_security는 무엇을 하는지에 대한 리스트가 있습니다.

    • 두개의 슬뤠시를 삭제합니다. (//)
    • 자신의 디렉토리를 삭제합니다. (./)
    • \를 /와 동일하게 처리합니다. (윈도우즈에서만)
    • URL을 디코딩 합니다.
    • 빈칸과 널 바이트들을(%00) 재 구성합니다.

저는 또한 공간과 모든 연속적인 여백 캐릭터를 대체하는 것에 대하여 생각하고 있습니다,
그러나 저는 아직 그것에 대하여 확신하고 있지 않습니다.

확실한 빌트인 체크는 신뢰를 줄 수 있습니다:

    • URL 엔코딩 확인
    • 유니코드 엔코딩 확인
    • 바이트 영역 검증, 어떤 곳에서는 오로지 일정한 문자 값들만 허용합니다.
2편은 계속 해서 올리겠습니다. :
2008/09/08 15:36 2008/09/08 15:36

About

by Jaehun

Counter

· Total
: 51567
· Today
: 89
· Yesterday
: 106