Tag Archives: 해킹

krcert에서 제공하는 mod_security 예시

krcert에서 내놓은 mod_security rule 예제입니다. 왠만한 인젝션과 XSS해킹 기법의 차단을 하도록 되어있습니다.

[CODE]##### Configuration #####
SecFilterEngine On
SecFilterScanPost On
SecFilterScanOutput Off
SecFilterOutputMimeTypes “(null) text/html text/plain”

##### Validation #####
SecFilterCheckURLEncoding On
SecUploadDir /tmp
SecUploadKeepFiles Off
SecFilterCheckUnicodeEncoding Off
SecFilterForceByteRange 1 255
SecFilterDefaultAction “log,deny,status:403”

##### Logging #####
SecFilterDebugLog logs/modsec_debug.log
SecFilterDebugLevel 1
SecAuditEngine RelevantOnly
SecAuditLog logs/modsec_audit.log

##### Hardening #####
# Body를 가진 GET 또는 HEAD 요청 차단(공격 가능성 높음)
SecFilterSelective REQUEST_METHOD “^(GET|HEAD)$” chain
SecFilterSelective HTTP_Content-Length “!^$”
SecFilterSelective SERVER_PROTOCOL “!^HTTP/(0\.9|1\.0|1\.1)$”
# Content-Length가 없는 POST 요청 차단
SecFilterSelective REQUEST_METHOD “^POST$” chain
SecFilterSelective HTTP_Content-Length “^$”
SecFilterSelective HTTP_Transfer-Encoding “!^$”

##### General #####
SecFilterSelective HTTP_Host|HTTP_User-Agent|HTTP_Accept “^$”
SecFilterSelective HTTP_User-Agent “(libwhisker|paros|wget|libwww|perl|curl|java)”

##### SQL Injection Attacks #####
SecFilterSignatureAction “log,deny,msg:’SQL Injection attack'”
SecFilterSelective ARGS “delete[[:space:]]+from”
SecFilterSelective ARGS “drop[[:space:]]+database”
SecFilterSelective ARGS “drop[[:space:]]+table”
SecFilterSelective ARGS “drop[[:space:]]+column”
SecFilterSelective ARGS “drop[[:space:]]+procedure”
SecFilterSelective ARGS “create[[:space:]]+table”
SecFilterSelective ARGS “update.+set.+=”
SecFilterSelective ARGS “insert[[:space:]]+into.+values”
SecFilterSelective ARGS “select.+from”
SecFilterSelective ARGS “bulk[[:space:]]+insert”
SecFilterSelective ARGS “union.+select”
SecFilterSelective ARGS “or.+1[[:space:]]*=[[:space:]]1”
SecFilterSelective ARGS “alter[[:space:]]+table”
SecFilterSelective ARGS “or 1=1–‘”
SecFilterSelective ARGS “‘.+–“
SecFilterSelective ARGS “into[[:space:]]+outfile”
SecFilterSelective ARGS “load[[:space:]]+data”
SecFilterSelective ARGS “/\*.+\*/”

##### XSS Attacks #####
SecFilterSignatureAction “log,deny,msg:’XSS attack'”
SecFilterSelective ARGS “<script”
SecFilterSelective ARGS “”
SecFilterSelective ARGS “vbscript:”
SecFilterSelective ARGS “document\.cookie”
SecFilterSelective ARGS “document\.location”
SecFilterSelective ARGS “document\.write”

##### Command Execution #####
SecFilterSignatureAction “log,deny,msg:’Command execution attack'”
SecFilterSelective ARGS_VALUES “;[[:space:]]*(ls|id|pwd|wget)”

##### PHP Attacks #####
SecFilterSignatureAction “log,deny,msg:’PHP Injection Attacks'”
SecFilterSelective ARGS_VALUES “^http:/”
SecFilterSelective ARGS_NAMES “(^globals\[|^globals$)”[/HTML][/CODE]

다음은 관련 문서입니다.
1035310335.pdf

스팸메일을 보내보자.

자아, 제목이 조금 선정적인 면이 없잖아 있다.

상대방의 서버를 웹취약점을 이용해 쉘을 얻어냈을때(root가 아니라 가정할때) 무엇을 할수 있을까?

상대방의 서버를 shutdown 시킬수 있을까? 어림없다.
그렇다면 내 계정을 하나 만들어 볼까? 역시 어림없다.
그렇다면 무엇을 할수 있을까?

아파치를 통해 쉘을 획득했을 경우 할수 있는것은 그 아파치의 권한으로 할수 있는것 모두이다.

아파치가 특정 경로에 들어갈수 있다면 나도 가능하고, 아파치가 특정 파일을 실행할수 있다면 나도 가능하다.

고로 커널상의 취약점이 있는 커널이라면 root취득으로의 길도 있을수 있겠다.

하지만 요즘의 추세에 따른 쉘 획득후 스팸메일 보내기에 대해 알아 보겠다.

이전의 포스트를 통해 쉘 명령어를 실행할수 있음을 알수있었다.

그렇다면 내가 만든 스팸메일 보내는 프로그램을 업로드 하고, 스팸메일 보내야 하는 사람들의 메일 리스트도 업로드 한후에 실행하면 될것이다.

어떻게 하는 방법이 있을까. 보통의 방법으로는 wget이나 lynx같은 리눅스 콘솔용 브라우저를 통해 자신이 임의의 서버에 올려놓은 파일을 다운로드 한다.

이후에 쉘명령을 내리면 될것이다. 간단하고 쉽지 않은가?

다음은 브라질의 한 해커(?)가 제작한 프로그램이다. 참고만 하자.

2079129296.zip

작동방법은 역시나 설명하지 않겠다-_-;

맨날 불만 지르고 불끄는 방법을 설명 안했는데. 오늘은 해보도록 하겠다.

서버관리자 입장에서 이와같은 해킹 유형을 어떻게 차단할수 있겠는가?

일단 가장 중요한것은 웹 어플리케이션에 구멍이 있어서는 안된다. 튼실히 제작되어야 할것이다.

하지만 개발이라는것이 모든 변수를 생각하기 힘들다. 고로 서버관리자입장에서는…

웹어플리케이션이 허술하다는 조건에서 시작하여야 할것이다. 그렇다면 아파치 차원에서 특정파일의 업로드나 실행을 막는 방법이 있겠다.

하지만 가장 쉽게 막는 방법이 한가지 있다. wget과 lynx의 권한을 당장에 root만 실행할수 있도록 바꿔보자.

[CODE type=bash][root@tomeii /]# whoami
root
[root@tomeii /]# whereis wget
wget: /usr/bin/wget /usr/share/man/man1/wget.1.gz
[root@tomeii /]# whereis lynx
lynx: /usr/bin/lynx /etc/lynx.cfg /usr/share/man/man1/lynx.1.gz
[root@tomeii /]# chmod 700 /usr/bin/wget
[root@tomeii /]# chmod 700 /usr/bin/lynx[/HTML][/CODE]

root인 상태에서 wget과 lynx의 위치를 파악한후 권한을 700을 주면 간단히 root만이 실행할수 있도록 할수 있다.
참고로 모든 시스템 명령어의 owner는 root이다.

물론 이것으로 모든것이 해결되는것은 아니다. 하지만 이것만으로도 일단 해커는 머리를 한번 더 굴려야 할것이다.

다음으로 이어서 좀더 완벽한 보안에 대해 이야기 해보도록 하자