Cloud 개발

리눅스 서버 해킹으로부터 보호 하는 최소한의 전략

긋대디 2021. 12. 5. 22:16

안녕하세요 굿대디입니다. 리눅스 서버 해킹 관련 실제로 제가 겪었던 소 잃고 외양간 고친 이야기를 하고자 합니다.


굿대디가 사회 초년생일 때 회사 서버를 임대했던 IDC 센터 내의 서버가 해킹으로 서버의 모든 자료를 완전히 날린 적이 있었습니다. 그때는 아무것도 몰랐을 때라 IDC 센터의 당직자에게 도움을 받아 서버를 정상화하고 있었죠~

​그런데~~~ 아 그런데 복구하고 있던 분의 실수로 서버의 자료가 몽땅 삭제되는 상황이 발생하였습니다. 그분이 도와주고 있었기에 자료를 날린 상태에서도 아무런 말도 할 수 없었습니다. 다행히 이전 백업본이 있어서 일부 데이터는 복구할 수 있었습니다.

​그날 이후 본인도 열심히 공부(?) 하여 리눅스 서버 보안에 대해 신경 썼고, 최소한이자 내가 할 수 있는 최대한의 방어는 해킹당할 수 있는 열린 문(서비스 Port 들)을 거의 걸어 잠그는 것이라 생각하고 지금껏 지켜오고 있습니다.

​사내 망이나 폐쇄망은 그나마 외부 침입 자체가 적어서 해킹당할 확률도 낮지만, 외부로 항상 열려있는 웹서버와 메일 서버 등은 대외 서비스를 하기에 항상 외부 문을 활짝 열어 놓고 있는 상태입니다.. 그래서 로그를 확인해 보면 하루도 거르지 않고 침입하려는 흔적이 발견됩니다.

​이는 본 서버를 지목하고 해킹하는 것이 아니라 Port Scan 프로그램으로 무작위로 아이피를 포트 스캔하여 열려있는 포트가 있는 서버가 발견되면, 다시 해당 서버 IP를 대상으로 ssh 로그인 포트가 열려있으면 ID 단어 사전 프로그램을 돌려 로그인 2차 시도를 하죠. 이때 영어 단어나 잘 아는 이름 등으로 계정을 만든 경우 이 단어사전 공격으로 뚫리는 상황이 생길 수 있습니다.

hydra 해킹툴

■ 서버 권한 탈취 시도 사례 1.

 ssh 사전식 무작위 대입 공격 Tool로 해킹

SSH 접속 해킹 사례로, ID/PW에 대입에 사용할 사전식 문서를 만들고 여기 등록된 단어들을 무작위로 ID/PASSWORD에 대입하여 찾을 때까지 공격하는 무차별 대입 공격(일명, Brute-force attack)에 취약한 아이디패스워드를 사용자 계정으로 생성했다면, 이 공격으로 로그인 권한 취득을 시도했을때 계정 해킹을 당할 수 있습니다. 아래는 실제 본인 서버를 해킹하고자 했던 로그를 분석하여 추출한 단어사전 사례입니다.
(서버 해킹 로그 분석)


쉽게 생각하면 test라는 계정이 있다고 생각하고 id에 test pw에 test 또는 1234, 12345, 123456, abcde, abcd123 등 하나씩 대입해서 뚫릴때까지 시도해 보는 것이죠, 이걸 사람이 하면 1만 년은 걸릴 수도 있으니 툴로 빠르게 시도하려고 프로그램들을 만들어 사용하고 있습니다. 

이에 사용되는 툴들도 다양하며, 브루투스(Brutus), 메두사(Medusa),THC 하이드라(THC Hydra), 엔크랙(Ncrack), 존 더 리퍼(John the Ripper), 에어크랙-ng(Aircrack-ng), 레인보우(Rainbow) 등이 있다고 합니다. 그중 하나인 히드라(hydra) 프로그램으로 아래와 같이 간단하게 실행이 가능합니다. telnet, ftp, ssh 등이 이 툴을 사용하여 id/pw 조합으로 취약한 id/pw를 사용 중인 서버라면 뚫릴 수 있는 상황이 됩니다.

아래는 계정은 root이고 password는 단어사전 파일을 이용하여 해킹을 시도한 사례입니다.

hydra -l root -P passwords_dic.txt -f 100.123.222.10 ssh

passwords_dic.txt 파일이 단어 사전입니다. 여기에 쉽게 유추할 수 있는 단어들이 등록되어 있으며, 해커들은 해당 파일을 공유하며, 더욱 양질의 사전 파일이 만들어지고 있습니다.

■ 서버 권한 탈취 시도 사례 2.

웹서버 취약점을 이용한 웹 해킹

  개발용 아이디 취약점을 파악하여 해킹시도하는 사례도 빈번합니다. 저도 특정 사이트를 확인해보면 admin 페이지가 쉽게 노출되는 경우도 있고 여기에 아래와 같은 id / pw를 간단한 것들을 적용화여 로그인되는 사이트들이 가끔 볼 수 있습니다. 개발 당시 편의를 위해 만들었던 계정을 실제 서비스 시 삭제하지 않아 노출되는 경우입니다. 상업용으로 운영 중인 사이트들도 있으니 주의가 필요합니다.
ID : admin, test, abcde 
Password : 1111, 1234, 123456, abcdef, qweasd 등 삭제
 
  웹서버의 경우 업로드 취약점을 악용한 파일 업로드 후 해킹 파일을 실행하려는 시도를 하고, XSS(크로 사이트 스크립트 공격) 등으로 해당 화면 변수 및 로그인 정보 등을 확인 후 변조하는 방식으로 로그인 획득 및 중요 정보에 접근을 시도할 수 있고, 웹서버 프로그램 코드의 취약한 코드를 공략하여 데이터베이스에 저장된 정보를 빼내고자 시도하기도 합니다. 이를 방어하려면 개발 시 해킹 방어 개발을 위한 secure cording에 신경 써서 개발해야 합니다. 관련 보안 방법론은 한국 인터넷진흥원(KISA) 기술 안내 가이드를 참고하시면 됩니다.

 

■ 서버 권한 탈취 시도 사례 3.

서버 커널 및 각종 서비스 데몬들의 취약점(버그)를 이용한 해킹

  리눅스 커널 및 각종 서비스 데몬(ftp, ssh, pop3, smtp, http 등)의 취약점을 이용한 권한 취득으로 이는 좀 더 특화된 해킹일 수 있습니다. 이를 방지하려면 적어도 주에 한번 정도 서버 패키지를 업데이트하도록 합니다. yum-cron 등으로 자동화하는 방법도 있지만 본인은 업데이트되는 내용을 확인하고, 업데이트로 인한 문제가 없는지 확인하기 위해 주기적으로 수동 업데이트를 실시하고 있습니다. redhat 계열 리눅스는 yum 또는 dns update로 명령어 한번 실행하면 되니 어렵지 않으며, 항상 최신 패키지를 유지하도록 해야 해킹으로부터 조금은 자유로울 수 있습니다.

 

해커로부터 서버를 보호하기 위한 최소한의 방어 전략!!
1. 서버 업데이트 주기적 실시
2. 외부 접속 확인 및 최소 포트 오픈
3. 웹 파일 업로드 실행 권한 차단
4. ssh 보안 설정
- root 접속 차단
- 특정 ip 외 모든 접속 차단
- 포트 변경하여 22접속 차단 (특정 포트로 변경하여 일반 알려진 포트로 사용하지 않기)
5. firewall 적용
6. 로그 모니터링
7. 실시간 탐지 가동
8. 데이터베이스 등 외부 접속 시 필요시만 열고 끝나면 차단
9. 응용프로그램 실행 시 사용자 권한으로 실행하고 포트는 firewall에서 포트 포워딩으로 설정하여 root 권한으로 프로그램 실행을 최소화 한다.