Server/보안

Kali Linux - SNMP 취약점 공격 (Metasploit 이용)

heyoon2j 2019. 7. 11. 12:17

■ SNMP 취약점 공격

NMS(Network Management System) : 네트워크 관리 시스템

- SNMP(Simple Network Management Protocol) : NMS에서 관리시스템과 관리대상 간에 정보를 전달하기 위한 프로토콜
 => 정보가 전달할 때 받기 위해 일종의 패스워드인 Community String을 사용한다

 

- Community String은 Default로 public, private로 설정된 경우가 많으며, 이를 변경하지 않으면 이 String을 악용하여 시스템의 주요 정보 및 설정을 파악할 수 있음.

 

 

○ Metasploit 이용

- EthernalBlue 취약점으로 공격을 한 뒤, hashdump 입력

 => EthernalBlue 취약점 공격하는 방법 : https://yoonix.tistory.com/40?category=0

- 사용자의 계정과 비밀번호가 출력이 된다.

 

- hashdump 내용을 복사해서 메모장에 저장

- 문장 인코딩은 CR(Carriage Return, 행의 맨 좌측으로 옮기기) + LF(Line Feed, 줄 바꾸기)로 저장

 

- 05-Password Attacks -> ophcrack

 

- PWDUMP file 클릭

 

- Crack을 누르게 되면 Hash를 분석해서 Password로 변환시켜준다.

- not found는 변환시키지 못했다는 의미이다(Password를 알 수 없다)

- 이렇게 되면 완전히 비밀번호를 알 수 없기 때문에 아래와 같이 공격하게 된다.

 

#snmp-check 1.0.0.201 | less : SNMP를 체크하는 명령어

 

- 명령어를 통해 위와 같이 기본적으로 'public' 으로 설정되어 있는 것을 확인할 수 있다.

- Port는 161번을 사용한다.

 

- User accounts : 계정 정보로 hashdump로 확인한 계정과 같은 것을 알 수 있다.

- user.txt로 저장한다(아래에서 Password를 알아내기 위해 쓰인다)

 

- 실제 공격 대상 PC로 접속하여, 서비스 -> SNMP Service -> 속성

 

- 보안을 보게 되면 Community가 public인 것을 확인할 수 있다!!!

 

- Community 이름 변경 -> pub

 

- 변경 후, snmp를 체크하게 되면 timeout이 뜨는 것을 확인할 수 있다.

 

- #snmp-check 1.0.0.201 -c pub : community를 pub로 설정해서 체크

- 다시 정상적으로 정보를 확인할 수 있게 된다.

 => community를 모르면 상대방은 확인할 수 없다.

 

- #crunch 4 4 0123456789 : crunch [min] [max] [options] - 숫자로 되어있고, 4글자인 암호를 생성한다.

 

- /usr/share/rainbowcrack/charset.txt에서 ascii-32-95와 같은 Character Set를 확인할 수 있다.

 

- #crunch 1 8 -f /usr/share/rainbowcrack/charset.txt ascii-32-95 : 이런 식으로 생성할 수 있지만, 실행하게 되면 많은 시간이 걸리므로 알아만 두면 된다.

 

- crunch 명령어를 통해서 만들어도 되지만, 지금은 테스트이기 때문에 직접 Password 텍스트 파일을 만든다. pass.txt 생성

아래에서 Password를 알아내기 위해 쓰인다.

 

- msfconsole 실행

 

- search ssh : ssh 모듈 검색

- 18번에 있는 auxiliary/scanner/ssh/ssh_loin : Login 정보를 수집하는 모듈 선택

- use auxiliary/scanner/ssh/ssh_login : 해당 모듈 사용

 

- show options : 해당 모듈의 Option을 확인한다.

- Required가 yes로 되어있는 것은 필수이기 때문에 공백으로 되어있으면 설정해줘야 한다.

- 그 외에도 설정 변경할 것이 있으면 바꿔주면 된다.

 

- pass_file의 경우, 설정을 하게 되면 해당 파일 안의 텍스트와 Password를 비교하게 된다.

- 이전에 비교하기 위해  만든 파일로 설정한다.

 

- rhosts는 공격 대상 IP로 설정하면 된다.

 

- user_file의 경우, 설정을 하게 되면 해당 파일 안의 텍스트와 User 명을 비교하게 된다.

- 이전에 비교하기 위해  만든 파일로 설정한다.

 

- run으로 실행하게 되면, 공격 대상 PC의 계정과 Password를 File들과 비교해서 맞는 것이 있다면, Success와 함께 [ID]:[Password]를 출력한다.

- 위와 같이 파일을 비교해서 확인하기 때문에, crunch 명령어를 통해 Password 파일을 생성해서 확인한다.

 

- #ssh -L 9000:1.0.0.201:3389 vagrant@1.0.0.201 : ssh -L [Local Port(원하는 포트 설정)] : [공격 대상 IP] : [3389(원격 접속 Port)] [User ID]@[공격 대상 IP]

- 접속이 되면 쉘이 바뀌는 것을 알 수 있다.

- 이렇게 위의 방법으로 ID와 Password를 알게 되면 SSH 터널링 등을 이용하여 쉽게 접근할 수 있게 된다.

 

=> 막는 방법은 비밀번호를 몇 번 이상 틀리면 정지시키는 방법과 같은 공격자를 귀찮게 하는 방법밖에 없다.