보안, 리눅스( Linux ) 기본 보안 |
reference : securityproof
SSH Bruteforce Attack
/etc/passwd 파일에 등록되어 있는 각 계정과 패스워드를 무작위 대입하는 방법 사용하여 서버 접속하는 방법. 이 공격을 하면 /var/log/secure 파일에 로그가 남는다.
Jul 25 08:31:32 localhost sshd[23569]: Failed password for invalid user samba from ::ffff:211.140.122.36 port 56974 ssh2
Jul 25 08:31:33 localhost sshd[23572]: Invalid user wwwrun from ::ffff:211.140.122.36
Jul 25 08:31:36 localhost sshd[23572]: Failed password for invalid user wwwrun from ::ffff:211.140.122.36 port 57533 ssh2
Jul 25 08:31:37 localhost sshd[23575]: Invalid user ldap from ::ffff:211.140.122.36
Jul 25 08:31:40 localhost sshd[23575]: Failed password for invalid user ldap from ::ffff:211.140.122.36 port 57725 ssh2
Jul 25 08:31:41 localhost sshd[23578]: Invalid user squid from ::ffff:211.140.122.36
Jul 25 08:31:43 localhost sshd[23578]: Failed password for invalid user squid from ::ffff:211.140.122.36 port 58279 ssh2 4
Jul 25 08:31:45 localhost sshd[23581]: Invalid user news from ::ffff:211.140.122.36
.....
이에 대한 대비책으로 사용하지 않는 계정 앞에 comment 처리를 하고,
사용되는 계정의 패스워드는 ssh bruteforce attack 에 사용되는 사전파일에 나오지 않는 강력한 패스워드를 사용해야 한다. 강력한 패스워드는 흔한 사람 이름, 지역 이름, 일반적으로 많이 사용되는영어단어를 제외한 특수문자와의 조합을 이야기한다.
자동화 공격 툴
현재 가장 많이 사용되고 있는 자동화 공격툴은
HDSI, MSSQL WEB SHELL( 자동화된 SQL Injection ), NBSI 등.
이 툴들은 자동화된 웹해킹을 실행하고, 각종 DB 정보를 빼간다.
Port Scanning. ( 포트 스캐닝 )
리눅스의 방화벽은 iptables.
iptables 를 이용하여 방화벽 운영을 하려면 포트 스캐닝을 먼저 해야 한다.
port scanning 은 서버에서 제공하는 각종 서비스 데몬의 포트를 확인하는 것.
nmap.
nmap 은 포트 스캐닝을 하여 열린 포트를 확인하고, 불필요한 서비스가 열려있지 않은지 확인.
# nmap localhost
ex result)
Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1593 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
80/tcp open http
3306/tcp open mysql
Nmap run completed -- 1 IP address (1 host up) scanned in 0.283 seconds
ssh 와 telnet 은 관리자나 사용자가 원격으로 서버에 접속하여 관리하는 데 사용되는데,
문제가 되는 것은 telnet.
secure 하지 않기 때문에 스니핑 공격의 대상이 된다.
따라서 만약 telnet 서비스가 제공되고 있고, 꼭 필요한 녀석이 아니면 꺼두는 것이 좋다.
꺼두는 방법은 다음과 같다.
#/etc/rc.d/init.d/telnetd stop
ftp 도 마찬가지로 ssh 의 sftp 의 기능이 보안상 안전하므로
굳이 ftp 를 사용할 필요가 없다.
sftp 를 사용하려면 SSH Secure Shell 프로그램을 이용하면 된다.
ftp 서비스를 끄려면 마찬가지로..
#/etc/rc.d/init.d/ftpd stop
덧붙여 굳이 서버를 메일서버로 사용할 필요도 없기 떄문에
가급적 메일서버는 다른 녀석을 사용하고,
메일 daemon 도 닫아 놓는 것이 좋다.
# /etc/rc.d/init.d/sendmail stop
가장 기본적인 웹 서버 운영 포트는
ssh, http, 그리고 mysql 이렇게 3가지이다.
본격 방화벽 설정.
콘솔 작업을 할 때는 root 로 접속하지 않는 것이 보안을 위해 좋다.
특정 사용자만 접속하게 하기 위해서는 /etc/passwd 에서 설정을 해주어야 한다.
ex)
root:x:0:0:root:/root:/bin/bash
...
test:x:500:500:test:/home/test:/bin/bash
특정 파일이 어디있는지 확인하기 위해서는 which 명령어를 쓴다.
# which iptables
방화벽 설정을 위한 script 파일
#!/bin/sh
# 기존 정책 초기화
/sbin/iptables -F
# 포트 스캐닝 방지
/sbin/iptales -A INPUT -d 0.0.0.0/0 -p icmp -j DROP
#DoS 공격 방지 위한 설정
/sbin/iptables -t nat -A syn-flood -m limit -limit 12/s \ --limit-burst 24 -j RETURN
/sbin/iptables -t nat -A syn-flood -j DROP
#ssh (port 22) 정책
#관리자가 고정아이피일 경우 그 아이피만 접속하게 할 수 있다.
/sbin/iptables -A INPUT -p tcp --dport 22 -s 123.123.123.123 -j ACCEPT
#passwd 에 등록된 특정 사용자만 접속하도록 설정.
/sbin/iptalbles -A INPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
/sbin/iptalbles -A INPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
/sbin/iptalbles -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
/sbin/iptalbles -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
/sbin/iptalbles -A INPUT -p tcp --dport 22 -m owner --uid-owner 500 -j ACCEPT
/sbin/iptalbles -A INPUT -p tcp --dport 22 -m owner --gid-owner 500 -j ACCEPT
/sbin/iptalbles -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 500 -j ACCEPT
/sbin/iptalbles -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 500 -j ACCEPT
#mySQL 정책 ( port 3306 )
/sbin/iptables -A INPUT -p tcp --dport 3306 -j REJECT
/sbin/iptables -A OUTPUT -p tcp --dport 3306 -j REJECT
위의 스크립트를 firewall 이라는 파일로 만들고, 권한을 준 후
# chmod 700 firewall
실행!
# ./firewall
이 스크립트를 실행한 후 nmap 을 다시 돌리면 결과가 나오지 않는다.
이 때 아래 명령어를 돌리면 제대로 뜨지만, 이 명령은 외부 네트워크를 통할 경우는 작동하지 않는다.
#nmap -P0 localhost
PORTSENTRY (침입 탐지 및 방어 시스템) 설치.
portsentry 는 wget 을 통해서 받을 수 있다.
# wget http://packetstormsecurity.org/UNIX/IDS/portsentry-1.1.tar.gz
# tar xvfz portsentry-1.1.tar.gz
# cd portsentry-1.1
# make linux
# make install ( 설치 완료 )
# cd /usr/local/psionic/portsentry
여기에는 3가지 파일이 있는데
portsentry 는 실행파일
portsentry.conf 는 설정 파일
portsentry.ignore 는 탐지를 무시해도 좋은 유저와 아이피 주소를 기록하는 곳.
portsentry.conf 파일을 edit 해서.
TCP_PORTS, UDP_PORTS 부분에 주석을 넣고,
사용할 Port 들만 재기록해준다.
ex)
TCP_PORTS="22,80,3306"
UDP_PORTS="22,80,3306"
Dropping Routes 부분에는
나머지를 삭제하고 다음을 넣어준다.
KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"
저장하고 나온다.
portsentry.ignore 는 고정 아이피를 사용하는 경우에만 넣어주면 된다.
이제 설정 적용을 위해서 shell script 를 만든다.
# cat > portsentry
=== editor start ===
#!/bin/sh
/usr/local/psionic/portsentry/portsentry -tcp
/usr/local/psionic/portsentry/portsentry -udp
/usr/local/psionic/portsentry/portsentry -atcp
/usr/local/psionic/portsentry/portsentry -audp
=== editor end ===
# chmod 700 portsentry
# ./portsentry
portsentry 가 제대로 실행되는지 보기 위해서 다음 명령어로 확인한다.
# ps -aux | grep portsentry
서버 공격에 대한 로그는 보통 /var/log/messages 와 /usr/local/psionic/portsentry 의 portsentry.history 파일에 에 쌓인다. iptables 를 통해서 공격자의 아이피를 막아버리면, 공격에 사용된 아이피로는 서버에 접근하지 못하게 된다.
요약!
1. SSH Bruteforce attck 방지를 위해 안 쓰는 계정들은 삭제하고, 암호는 어렵게 고도화시켜야 한다.
2. nmap 을 통한 포트스캐닝을 통해 보안에 취약할 수 있거나 사용하지 않는, port 를 사용하는 daemon 들은 중단시킨다.
기본적인 port 사용하는 daemon 은 ssh, http, mysql 이렇게 3가지.
3. iptables 을 조작해 방화벽을 설정한다. in, out 에 대한 ip, port 등을 정의하고,
dDos 나 port scanning 에 대한 방어책도 마련할 수 있다.
4. portsentry 라는 침입 탐지 및 방어 시스템을 이용하여, 방화벽으로 부족한 보안기능을 강화할 수 있다.
5. 이들을 잘 이해하고 더 나은 보안을 위해서는 linux 공부를 부단히 하여 제대로 이해해야 한다.
'IT 놀이터 > Linux' 카테고리의 다른 글
[linux] etc 폴더에 대한 분석. (0) | 2014.02.07 |
---|---|
[Linux] daemon 상태 컨트롤 (0) | 2014.02.05 |
VIM 에서 Ctrl +S 누르면 뻗는 문제. (0) | 2014.01.26 |
most frequently used vim shortcuts ( 가장 자주 쓰이는 vim 단축키 모음 ) (0) | 2013.12.19 |
shell returned 127 (0) | 2013.11.11 |
댓글