본문 바로가기
IT 놀이터/Linux

[보안] 리눅스( Linux ) 기본 보안

by 돼지왕 왕돼지 2014. 1. 27.
반응형


 보안, 리눅스(  Linux ) 기본 보안

 

[보안] 리눅스(  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 공부를 부단히 하여 제대로 이해해야 한다.






반응형

댓글