2019년 11월 3일 (일) 부터 딥러닝 서버의 모든 GPU가 100% 가동되는 현상 이 보고되었습니다. 연구실의 동료로부터 유선상으로 전화를 받았는데, 처음에는 train script가 백그라운드에서 돌아가고 있는 것으로 생각했습니다.

월요일 복귀하여 서버 상태를 점검한 결과, 심상치 않음을 느끼고 모든 프로세스를 초기화한 후 root로 로그인하여 조사에 들어갔습니다. 서버의 운영체제는 ubuntu 18.04입니다.

1. 현재 실행중인 프로세스 확인

ps aux

비정상적인 프로세스는 발견하지 못했습니다.

netstat -anp

비정상적으로 개방된 네트워크 포트를 발견하지 못하였습니다.

2. 서버 접속기록 분석

가장 간단하게 확인할 수 있는 명령어는 last입니다.
이 명령어는 /var/log/wtmp 파일에 저장된 계정 로그인 기록을 보여줍니다.

> last
diml     pts/0        165.132.222.22   Mon Nov  4 08:54   still logged in
diml     pts/0        165.132.222.22   Mon Nov  4 08:49 - 08:49  (00:00)
diml     pts/2        211.176.111.11   Mon Nov  4 00:20 - 00:22  (00:01)
diml     pts/0        211.176.111.11   Mon Nov  4 00:20 - 00:22  (00:02)
diml     pts/0        211.176.111.11   Mon Nov  4 00:19 - 00:20  (00:00)
diml     pts/0        211.176.111.11   Mon Nov  4 00:17 - 00:17  (00:00)
diml     pts/0        211.176.111.11   Mon Nov  4 00:15 - 00:15  (00:00)
diml     pts/8        211.176.111.11   Sun Nov  3 22:10 - 22:12  (00:02)
diml     pts/7        165.132.000.00   Sun Nov  3 21:54   still logged in
diml     pts/6        165.132.000.00   Sun Nov  3 21:52   still logged in
diml     pts/5        165.132.000.00   Sun Nov  3 21:48 - 21:54  (00:05)
diml     pts/1        165.132.000.00   Sun Nov  3 21:46 - 21:48  (00:02)
diml     pts/4        165.132.333.33   Sat Nov  2 15:55 - 15:57  (00:02)
diml     pts/4        165.132.333.33   Sat Nov  2 14:36 - 14:57  (00:20)
diml     pts/4        165.132.333.33   Sat Nov  2 14:35 - 14:35  (00:00)
diml     pts/7        14.52.13.40      Sat Nov  2 00:54 - 01:39  (00:44)
diml     pts/6        14.52.13.40      Sat Nov  2 00:54 - 01:39  (00:45)
diml     pts/5        14.52.13.40      Sat Nov  2 00:54 - 01:39  (00:44)
diml     pts/4        14.52.13.40      Sat Nov  2 00:54 - 03:10  (02:16)

165.132 대역은 학교 내부망이고, 211.176은 저희 집입니다.
낯선 14.54 대역의 접속기록이 보입니다. 인터넷을 검색해보면 /var/wtmp 파일의 접속 기록을 지우는 많은 도구들이 있음을 알 수 있습니다. 아마도 공격자가 자신의 접속 기록을 지웠을 것으로 추정됩니다.

Linux 운영체제에서 SSH로 접속한 기록은 /var/log/auth.log 파일에 기록됩니다. 이 기록을 확인해보겠습니다.

> ls -als /var/log/auth*
 4668 -rw-r----- 1 syslog adm  4774055 11월  4 10:41 /var/log/auth.log
36000 -rw-r----- 1 syslog adm 36859839 11월  3 00:09 /var/log/auth.log.1
 1944 -rw-r----- 1 syslog adm  1987782 10월 28 00:07 /var/log/auth.log.2.gz
  856 -rw-r----- 1 syslog adm   875323 10월 20 00:07 /var/log/auth.log.3.gz

11월 3일의 log가 10월에 비해 약 10배 이상 급증한 것을 발견할 수 있습니다. 주로 SSH에 대한 무작위대입공격이 있을 때 이러한 현상이 발견됩니다.

로그인에 실패한 기록들을 살펴보겠습니다.

> grep Failed /var/log/auth* | head
Oct 28 00:07:48 diml-b1 sshd[3941]: Failed password for root from 218.92.0.208 port 43464 ssh2
Oct 28 00:07:49 diml-b1 sshd[4056]: Failed password for root from 218.92.0.141 port 22858 ssh2
Oct 28 00:07:53 diml-b1 sshd[4056]: Failed password for root from 218.92.0.141 port 22858 ssh2
Oct 28 00:08:04 diml-b1 sshd[4056]: message repeated 4 times: [ Failed password for root from 218.92.0.141 port 22858 ssh2]
Oct 28 00:08:12 diml-b1 sshd[4150]: Failed password for root from 218.92.0.141 port 41766 ssh2

> grep Failed /var/log/auth.log.1 | tail
Nov  3 00:08:59 diml-b1 sshd[6397]: Failed password for invalid user sy from 142.93.163.77 port 45874 ssh2
Nov  3 00:09:10 diml-b1 sshd[6435]: Failed password for root from 218.92.0.211 port 23373 ssh2
Nov  3 00:09:15 diml-b1 sshd[6435]: message repeated 2 times: [ Failed password for root from 218.92.0.211 port 23373 ssh2]
Nov  3 00:09:18 diml-b1 sshd[6461]: Failed password for invalid user jackolantern from 117.117.165.131 port 59953 ssh2
Nov  3 00:09:27 diml-b1 sshd[6484]: Failed password for invalid user diamond from 207.154.239.128 port 38662 ssh2

공격은 10월 28일 오전 00:07에 무작위 대입공격이 시작되어 11월 3일 오전 00:09경에 성공했습니다.

191104-hacking-ip

로그인에 실패한 횟수를 세어보겠습니다.

> grep Failed /var/log/auth* | wc -l
125659

무작위 대입공격이 시작된 시간은 2019-10-28-07:48이고, 이때부터 무려 12만 5천번의 공격이 이어진 후 2019-11-03-00:09에 성공하게 됩니다. 이로부터 중국 해커들이 136시간 21분동안 125,659번의 로그인 시도를 하여 root 권한 탈취에 성공한 것으로 결론을 내릴 수 있습니다.

3. ip 분석

가장 공격시도가 많았던 ip순으로 정렬해보겠습니다.

> grep authentication /var/log/auth* | cut -d'=' -f7 | cut -d' ' -f1 | sort | uniq -c | sort -r
  28159 /var/log/auth.log.1:Oct
  11090 218.92.0.210
  10489 218.92.0.141
   7122 /var/log/auth.log.1:Nov
   6327 218.92.0.138
   5619 112.85.42.171
   4647 218.92.0.193
   4131 218.92.0.211
   3883 112.85.42.195
   2987 218.92.0.167
   2245 218.92.0.208
   2050 218.92.0.181
   1837 218.92.0.212
   (이하생략)

191104-hacking-ip

꽤 많은 수의 ip들이 동원되었습니다. 대부분 중국 ip입니다.

이번 해킹은, 쉘스크립트를 심어 서버가 채굴에 동원되도록 만들었습니다.
관련 로그가 있었더라면 좋았을텐데, 이를 확보하지 못한 점이 조금 아쉽습니다.

4. 대책

4. 결론

처음으로 딥러닝 서버에 대한 ssh brute-force 공격을 받은 것을 인지하고 이를 조사했습니다. 웹서버의 22번 포트가 외부로 열려있을땐 항상 조심해야 하며, 비밀번호를 가능한 어렵게 설정해야 합니다.

이번 사건의 경우에도 비밀번호가 일반단어로 되어있어 상대적으로 무작위대입공격에 취약했습니다. 대책으로는 가장 이상적으로 운영체제를 재설치해야하나, 여건상 비밀번호를 변경하고 모니터링을 하며 경과를 살펴보기로 했습니다.

이상입니다.

Acknowledgement
도움을 주신 webhack님에게 감사의 말씀을 전합니다.

Comments

Eungbean Lee's Picture

About Eungbean Lee

Lee is a Student, Programmer, Engineer, Designer and a DJ

Seoul, South Korea https://eungbean.github.io