한동안 괜찮아 보이던 서버에 약간 프로세스 부하가 생기는 것 같아 프로세스 실행 목록을 보니 www-data 계정에서 perl 스크립트를 실행하는 것이 포착됐다.

도대체 이 프로세스가 무슨 작업을 하는 걸까? 궁금함에 프로세스가 수행중인 내용이 무엇인지 확인하는 방법이 없나 검색해봤다.

목적에 딱 맞는지는 모르겠으나 strace 명령으로 해당 프로세스가 대략적으로 무슨 짓을 하는지 파악할 수 있는 것 같았다.

우선 ps 명령을 이용해 perl 스크립트가 뭘 수행중인지 먼저 확인했다.

  1. $ ps -auxww

위 명령을 사용하면 ps 출력 결과에서 command 부분이 짤리지 않고 모두 출력되어 나온다. 위 명령으로 확인한 실행중인 내용은 다음과 같았다.

  1. perl /tmp/redrv

tmp 디렉토리에서 특정 스크립트를 실행중이었는데 tmp 디렉토리를 확인해보니 redrv라는 건 없었다. 아마도 스크립트를 실행하면서 해당 파일은 지우게 한 것 아닌가 추정된다.

본격적으로 strace 명령으로 뭔 내용이 동작 중인가 확인해봤다. 명령은 다음과 같다.

  1. $ strace -p 22138

process ID 22138이 위에서 확인했던 perl 스크립트 프로세스다. 위 명령 결과 다음과 같은 동작 내용들이 확인 됐다.

  1. 11:46:39 fcntl(31, F_SETFL, O_RDWR|O_NONBLOCK) = 0
  2. 11:46:39 select(32, NULL, [4 5 8 9 11 14 20 22 23 24 25 29 30 31], NULL, {tv_sec=0, tv_usec=0}) = 3 (out [9 14 31], left {tv_sec=0, tv_usec=0})
  3. 11:46:39 getpeername(310x55def75dac40[256]) = -1 ENOTCONN (Transport endpoint is not connected)
  4. 11:46:39 sendto(31"\nP\1\0\0\1\0\0\0\0\0\0\4mta6\3am0\10yahoodns\3net\0\0\1\0\1"390{sa_family=AF_INET,      sin_port=htons(53), sin_addr=inet_addr("194.164.181.2")}16) = 39
  5. 11:46:39 write(14"EHLO localhost\r\n"16) = 16
  6. 11:46:39 write(9"EHLO localhost\r\n"16) = 16
  7. 11:46:39 select(32[6 7 9 10 12 13 14 15 16 17 18 19 21 26 27 28 31], NULL, NULL, {tv_sec=0, tv_usec=0}) = 1 (in   [17], left {tv_sec=0, tv_usec=0})
  8. 11:46:39 read(17"220 mtaproxy503.free.mail.ne1.yahoo.com ESMTP ready\r\n"16384) = 53
  9. 11:46:39 select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=10000}) = 0 (Timeout)
  10. 11:46:39 socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) = 32
  11. 11:46:39 ioctl(32, TCGETS, 0x7ffe1c622340) = -1 ENOTTY (Inappropriate ioctl for device)
  12. 11:46:39 lseek(320, SEEK_CUR)         = -1 ESPIPE (Illegal seek)
  13. 11:46:39 ioctl(32, TCGETS, 0x7ffe1c622340) = -1 ENOTTY (Inappropriate ioctl for device)
  14. 11:46:39 lseek(320, SEEK_CUR)         = -1 ESPIPE (Illegal seek)
  15. 11:46:39 fcntl(32, F_SETFD, FD_CLOEXEC) = 0
  16. 11:46:39 fcntl(32, F_GETFL)             = 0x2 (flags O_RDWR)
  17. 11:46:39 fcntl(32, F_SETFL, O_RDWR|O_NONBLOCK) = 0
  18. 11:46:39 select(40, NULL, [4 5 8 11 17 20 22 23 24 25 29 30 32], NULL, {tv_sec=0, tv_usec=0}) = 3 (out [17 20 32],  left {tv_sec=0, tv_usec=0})
  19. 11:46:39 getpeername(320x55def75dac40[256]) = -1 ENOTCONN (Transport endpoint is not connected)
  20. 11:46:39 sendto(32"\344;\1\0\0\1\0\0\0\0\0\0\4mta6\3am0\10yahoodns\3net\0\0\1\0\1"390{sa_family=AF_INET,    sin_port=htons(53), sin_addr=inet_addr("194.169.232.6")}16) = 39
  21. 11:46:39 getpeername(20{sa_family=AF_INET, sin_port=htons(25), sin_addr=inet_addr("67.195.204.77")}[256->16]) = 0
  22. 11:46:39 write(17"EHLO localhost\r\n"16) = 16
  23. 11:46:39 select(40[6 7 9 10 12 13 14 15 16 17 18 19 20 21 26 27 28 31 32], NULL, NULL, {tv_sec=0, tv_usec=0}) = 1 (in [18], left {tv_sec=0, tv_usec=0})
  24. 11:46:39 read(18"220 mtaproxy108.free.mail.gq1.yahoo.com ESMTP ready\r\n"16384) = 53
  25. 11:46:39 select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=10000}) = 0 (Timeout)


정확히는 모르겠으나 느낌상 내 서버가 스팸 메일을 뿌리는 역할로 사용된 것 같다. 어제 저녁에 서버를 reboot하고 해당 프로세스들이 없는 걸 확인했는데 오전 부터 다시 실행된 흔적이 보였다. 아직 어떤 경로로 해당 프로세스가 실행됐는지 확인을 못한 상태다. 현재는 wordpress 플러그인들 중 security 플러그인이 있어서 해당 플러그인 실행중인 상태다.

 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기