SSH-brute-force


 

Notice : 해당 자료가 저작권등에 의해서 문제가 있다면 바로 삭제하겠습니다.
연구목적으로 사용하지 않고 악의적인 목적으로 이용할 경우 발생할 수 있는 법적은 책임은 모두 본인에게 있습니다.

SSH Brute-force 공격 분석

최근 들어서 리눅스 서버의 secure 로그나 Abuse 메일들을 확인해 보면 일정한 ID를 이용해서 ssh 접속 시도를 하는 것을 볼수가 있다.
이런 공격은 brute-force(무차별 공격)로서, 패스워드 사전 파일을 이용해서 미리 지정한 아이디와 대입하여, 접속 계정을 알아 내는 해킹 방법이다.
brute-force 공격은 관리자만 부지런 하면 막을수 있는 공격이다.
아래 예는 대표적인 ssh brute-force 공격툴이 어떤 방식으로 동작을 하는지 실제 구현을 통하여 알아 보았다.

아래는 ssh scan tools의 소스코드 로서, 이미 공개된 소스코드 이지만 악의적으로 / 혹은 테스트를 하고자 하다가 잘못해서 다른 네트웍을 스캔하면 문제가 발생할수 있으므로 전체를 공개하지는 않았다.

소스코드를 컴파일 하여,실행파일을 파일을 생성하고/Victim Server로 만들어 놓은 서버에 대해서 ssh brute-force 공격을 시도하였다.

공격자는 Victim 서버에 대한 접근 권한을 취득하게 되었고,자연스럽게 서버에 접속 할수 있게 되었다.
만일 Victim 서버가 커널등 패키지 들을 제대로 패치를 하지 않은 서버라면, root 권한까지 빼앗기는 것은 시간 문제이며, Victim 서버는 다른 서버를 공격하게 되는 중계 서버가 되어 버리게 될것이다.

그렇게 되면 머지 않아 Victim 서버의 관리자는 어느날 외부기관으로부터 혹은 개인으로부터 Victim 서버가 그들의 서버에 공격 또는 스팸 등을 보내고 있다는 메일을 받게 될 것이다.

1. 포트를 변경하라.
여러 ssh 공격 코드를 분석해본 결과 포트를 직접 지정하는 공격툴도 있었지만, 대부분은 (위의 공격툴 역시) ssh는 22번으로 고정되어 있다. 그러므로 ssh 포트를 22번이 아닌 다른 포트로 바꾸는 것만으로도 90% 이상의 공격은 방어할수 있다.(실제로 ssh를 22번으로 설정해 놓은 서버의 경우에는 수많은 공격로그가 secure에 쌓여 있었지만, 포트를 변경해 놓은 서버에서는 공격로그를 찾아 볼수 없었다.)

일반적으로 ssh의 포트를 변경하기 위해서는 /etc/ssh/sshd_config의 #port 22 항목의 주석을 제거 해주고, 22번을 다른 포트 번호로 변경해 주고, sshd를 restart 해주면 된다.

2. 패스워드를 변경하라.
부득이 포트를 변경하지 못할 상황이라면, 패스워드를 강력하게 설정해야 한다. 대부분의 brute-force 공격은 사전(dictionary) 공격이기 때문에,영단어와 숫자등으로 구성되어 있다.(간혹 !@#$%^& 등의 숫자키로 연속되는 패스워드도 등록이 되어 있다.)
그렇기 때문에 패스워드를 유추할수 없도록 만들면, 해당 ssh 공격에 대해서 안전하다.
강력한 패스워드라는 것은 숫자와 영문자(대/소문자) 그리고 특수문자를 조합하는 방식으로 유추하기는 어렵지만, 외우기는 쉬운 패스워드를 생성해야 한다.
즉 Kimhoon 이라는 서버 관리자가 자신의 이름으로 패스워드를 만든다면,다음과 같이 만들 수 있겠다.
K!mh0oN( 대문자 K, 특수문자 !, 소문자 m, h, 숫자 0, 소문자 o, 대문자 N )
외우기 쉬우면서도 대/소문자, 숫자, 특수문자가 모두 들어간 유추하기 어려운 강력한 패스워드가 생성되었다. 이런방식을 이용해서 자신만의 강력한 패스워드를 생성한다면, 비단 이 ssh 공격뿐만 아니라, 일반적인 서버 운영에서도 보안을 향상시킬수가 있다.

3. 필터링 툴을 사용하라.
tcpwrapper / iptables 등과 같은 필터링 툴로서 ssh에 접속할수 있는 IP를 제한시켜 준다.

▷ tcpwrapper
– /etc/hosts.allow와 /etc/hosts.deny를 이용한다.
/etc/hosts.deny를 vi로 열어서 아래와 같이 설정한 뒤에,(모든 ssh 접속을 막겠다는 의미이다.)

sshd: ALL

/etc/hosts.allow를 vi로 열어서 아래와 같이 설정한다.(ssh 접속에는 xxx.xxx.xxx.xx1 와 xxx.xxx.xxx.xx2 만이 접속할 수 있다.)

sshd : xxx.xxx.xxx.xx1 xxx.xxx.xxx.xx2

tcpwrapper로 제한을 한뒤에는 반드시 외부에서 연결 테스트를 해봐야 한다. (허가된곳에서는 정상적으로 접속되는지, 나머지에서는 접속이 되지 않는지 확인 – 테스트가 끝날때까지 현재 서버에 연결된 터미널은 닫지 않는다.)

▷ iptables
– iptables -A INPUT -p tcp -s xxx.xxxxxx.xxx –dport 22 -j
ACCEPT

위와 같은 방식으로 22번에 접속할수 있는 사용자를 제한해 주면 된다. (자세한 iptables 사용법은 책/검색엔진을 참고바람)

4. 방화벽을 사용하라.

위와 같은 방법을 모두 사용할 수가 없다면,방화벽을 사용하면 된다. 방화벽은 이번 공격뿐만 아니라, 현재 알려진 공격에 대해서는 차단을 해줄수 있으므로,서버 보안이 상당히 향상된다.
(다만 어떤 방화벽도 완벽한 것은 없기 때문에,늘 취약점이 발표되면, 관심을 가지고 필요하다면 패치를 시행해야 한다.)
몇가지 방법으로 ssh brute-force 공격에 대비할수 있는 방법을 알아 보았다.

이런 공격외에도 네트웍 상에는 엄청나게 많은 공격이 시행되어지고 있다. 수많은 해커들이 지금도 불특정 다수에 대해서 공격을 시도하고 있다. 이런 위협으로부터 안전하게 서버를 지키는 길은 주기적인 서버의 패치, 패스워드의 변경, 최신 공격에 대한 정보 수집과 대책이 동시에 마련되어져야 한다.

관련 로그

다음은 여러프로그램으로 외부에서 스캔을 했을때 secure에 남는 로그 들이다.
해당 로그를 눈에 익혀두면, 어떤 류의 공격툴에 의한 scan이었는지 확인하는데 도움이 될것이다.
scanssh 라는 프로그램으로 외부 스캔시

– 일반 스캔시

– 식별 strings을 전송하지 않는 옵션 사용 ( -I )

– sshbsdx 라는 툴로서 스캔/공격시

– bigsshf 툴을 사용해서 스캔/공격시

참고 : http://blog.naver.com/rainingman23?Redirect=Log&logNo=28040215

 


This entry was posted in C/C++, Security/Hacking, Util/Tools and tagged , , , , , . Bookmark the permalink.

댓글 남기기