เมื่อวันก่อน Group-IB
ผู้เชี่ยวชาญด้านการวิเคราะห์โค้ดที่เป็นอันตรายที่ Group-IB อีวาน ปิซาเรฟ ในงานวิจัยของเขา เขาพูดถึงรายละเอียดเกี่ยวกับวิธีการทำงานของ Gustuff และอันตรายของมัน
กัสทัฟฟ์กำลังตามล่าใครอยู่?
Gustuff เป็นมัลแวร์รุ่นใหม่ที่มีฟังก์ชันอัตโนมัติเต็มรูปแบบ ตามที่นักพัฒนาระบุ โทรจันได้กลายเป็นมัลแวร์ AndyBot เวอร์ชันใหม่ที่ได้รับการปรับปรุง ซึ่งตั้งแต่เดือนพฤศจิกายน 2017 ได้โจมตีโทรศัพท์ Android และขโมยเงินผ่านแบบฟอร์มเว็บฟิชชิ่งที่ปลอมแปลงเป็นแอปพลิเคชันมือถือของธนาคารต่างประเทศและระบบการชำระเงินที่มีชื่อเสียง Bestoffer รายงานว่าราคาเช่า Gustuff Bot อยู่ที่ 800 เหรียญต่อเดือน
การวิเคราะห์ตัวอย่าง Gustuff แสดงให้เห็นว่าโทรจันอาจกำหนดเป้าหมายลูกค้าที่ใช้แอปพลิเคชันมือถือของธนาคารที่ใหญ่ที่สุด เช่น Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank รวมถึงกระเป๋าสตางค์ crypto กระเป๋าเงิน Bitcoin, BitPay, Cryptopay, Coinbase ฯลฯ
เดิมทีสร้างขึ้นเป็นโทรจันธนาคารแบบคลาสสิก ในเวอร์ชันปัจจุบัน Gustuff ได้ขยายรายการเป้าหมายที่เป็นไปได้สำหรับการโจมตีอย่างมีนัยสำคัญ นอกเหนือจากแอปพลิเคชัน Android สำหรับธนาคาร บริษัท fintech และบริการ crypto แล้ว Gustuff ยังมุ่งเป้าไปที่ผู้ใช้แอปพลิเคชันในตลาด ร้านค้าออนไลน์ ระบบการชำระเงิน และผู้ส่งข้อความด่วน โดยเฉพาะอย่างยิ่ง PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut และอื่นๆ
จุดเริ่มต้น: การคำนวณการติดเชื้อจำนวนมาก
Gustuff โดดเด่นด้วยเวกเตอร์ "คลาสสิก" ของการรุกเข้าสู่สมาร์ทโฟน Android ผ่านการส่งอีเมล SMS พร้อมลิงก์ไปยัง APK เมื่ออุปกรณ์ Android ติดโทรจันตามคำสั่งของเซิร์ฟเวอร์ Gustuff อาจแพร่กระจายผ่านฐานข้อมูลการติดต่อของโทรศัพท์ที่ติดไวรัสหรือผ่านฐานข้อมูลเซิร์ฟเวอร์ ฟังก์ชันการทำงานของ Gustuff ได้รับการออกแบบมาเพื่อการติดเชื้อในวงกว้างและการใช้เงินทุนสูงสุดในธุรกิจของผู้ให้บริการ - มีฟังก์ชัน "เติมอัตโนมัติ" ที่เป็นเอกลักษณ์ลงในแอปพลิเคชันธนาคารบนมือถือและกระเป๋าเงินดิจิทัลที่ถูกกฎหมาย ซึ่งช่วยให้คุณเร่งความเร็วและปรับขนาดการขโมยเงินได้
การศึกษาเกี่ยวกับโทรจันพบว่ามีการใช้งานฟังก์ชันป้อนอัตโนมัติโดยใช้ Accessibility Service ซึ่งเป็นบริการสำหรับผู้พิการ Gustuff ไม่ใช่โทรจันตัวแรกที่ประสบความสำเร็จในการหลีกเลี่ยงการป้องกันการโต้ตอบกับองค์ประกอบหน้าต่างของแอปพลิเคชันอื่นที่ใช้บริการ Android นี้ อย่างไรก็ตามการใช้บริการ Accessibility Service ร่วมกับการเติมน้ำมันรถยนต์ยังเกิดขึ้นไม่บ่อยนัก
หลังจากดาวน์โหลดลงในโทรศัพท์ของเหยื่อ Gustuff โดยใช้บริการการเข้าถึงจะสามารถโต้ตอบกับองค์ประกอบหน้าต่างของแอปพลิเคชันอื่น ๆ (การธนาคาร สกุลเงินดิจิทัล รวมถึงแอปพลิเคชันสำหรับการช็อปปิ้งออนไลน์ การส่งข้อความ ฯลฯ) เพื่อดำเนินการที่จำเป็นสำหรับผู้โจมตี . ตัวอย่างเช่น ตามคำสั่งของเซิร์ฟเวอร์ โทรจันสามารถกดปุ่มและเปลี่ยนค่าของช่องข้อความในแอปพลิเคชันธนาคารได้ การใช้กลไกบริการการเข้าถึงทำให้โทรจันสามารถเลี่ยงผ่านกลไกความปลอดภัยที่ธนาคารใช้เพื่อตอบโต้โทรจันมือถือรุ่นก่อนหน้า รวมถึงการเปลี่ยนแปลงนโยบายความปลอดภัยที่ Google นำมาใช้ในระบบปฏิบัติการ Android เวอร์ชันใหม่ ดังนั้น Gustuff “รู้วิธี” เพื่อปิดการใช้งานการป้องกันของ Google Protect: ตามที่ผู้เขียนกล่าวไว้ ฟังก์ชั่นนี้ใช้งานได้ใน 70% ของกรณี
Gustuff ยังสามารถแสดงการแจ้งเตือน PUSH ปลอมพร้อมไอคอนของแอปพลิเคชันมือถือที่ถูกกฎหมาย ผู้ใช้คลิกที่การแจ้งเตือน PUSH และเห็นหน้าต่างฟิชชิ่งที่ดาวน์โหลดจากเซิร์ฟเวอร์ ซึ่งเขาป้อนข้อมูลบัตรธนาคารหรือกระเป๋าเงินดิจิตอลเข้ารหัสที่ร้องขอ ในสถานการณ์ Gustuff อื่น แอปพลิเคชันในนามของการแสดงการแจ้งเตือน PUSH จะถูกเปิดขึ้น ในกรณีนี้ เมื่อได้รับคำสั่งจากเซิร์ฟเวอร์ผ่านบริการการเข้าถึง มัลแวร์จะสามารถกรอกแบบฟอร์มในใบสมัครธนาคารเพื่อทำธุรกรรมที่เป็นการฉ้อโกงได้
ฟังก์ชันการทำงานของ Gustuff ยังรวมถึงการส่งข้อมูลเกี่ยวกับอุปกรณ์ที่ติดไวรัสไปยังเซิร์ฟเวอร์ ความสามารถในการอ่าน/ส่งข้อความ SMS การส่งคำขอ USSD การเปิดใช้งาน SOCKS5 Proxy ตามลิงก์ การส่งไฟล์ (รวมถึงการสแกนภาพถ่ายของเอกสาร ภาพหน้าจอ รูปถ่าย) ไปยัง เซิร์ฟเวอร์ ให้รีเซ็ตอุปกรณ์เป็นการตั้งค่าจากโรงงาน
การวิเคราะห์มัลแวร์
ก่อนที่จะติดตั้งแอปพลิเคชันที่เป็นอันตราย ระบบปฏิบัติการ Android จะแสดงหน้าต่างที่มีรายการสิทธิ์ที่ Gustuff ร้องขอให้ผู้ใช้เห็น:
แอปพลิเคชันจะถูกติดตั้งหลังจากได้รับความยินยอมจากผู้ใช้เท่านั้น หลังจากเปิดแอปพลิเคชั่น โทรจันจะแสดงหน้าต่างให้ผู้ใช้เห็น:
หลังจากนั้นมันจะลบไอคอนออก
ตามที่ผู้เขียนระบุ Gustuff ได้รับการบรรจุโดยผู้บรรจุหีบห่อจาก FTT หลังจากเริ่มต้น แอปพลิเคชันจะติดต่อกับเซิร์ฟเวอร์ CnC เป็นระยะเพื่อรับคำสั่ง ไฟล์หลายไฟล์ที่เราตรวจสอบใช้ที่อยู่ IP เป็นเซิร์ฟเวอร์ควบคุม 88.99.171[.]105 (ต่อไปนี้เราจะแสดงเป็น <%ซีเอ็นซี%>).
หลังจากเปิดตัวโปรแกรมจะเริ่มส่งข้อความไปยังเซิร์ฟเวอร์ http://<%CnC%>/api/v1/get.php.
การตอบสนองคาดว่าจะเป็น JSON ในรูปแบบต่อไปนี้:
{
"results" : "OK",
"command":{
"id": "<%id%>",
"command":"<%command%>",
"timestamp":"<%Server Timestamp%>",
"params":{
<%Command parameters as JSON%>
},
},
}
แต่ละครั้งที่มีการเข้าถึงแอปพลิเคชัน แอปพลิเคชันจะส่งข้อมูลเกี่ยวกับอุปกรณ์ที่ติดไวรัส รูปแบบข้อความแสดงไว้ด้านล่าง เป็นที่น่าสังเกตว่าทุ่งนา เต็ม, พิเศษ, ปพลิเคชัน и การอนุญาต – เป็นทางเลือก และจะถูกส่งเฉพาะในกรณีที่มีคำขอคำสั่งจาก CnC เท่านั้น
{
"info":
{
"info":
{
"cell":<%Sim operator name%>,
"country":<%Country ISO%>,
"imei":<%IMEI%>,
"number":<%Phone number%>,
"line1Number":<%Phone number%>,
"advertisementId":<%ID%>
},
"state":
{
"admin":<%Has admin rights%>,
"source":<%String%>,
"needPermissions":<%Application needs permissions%>,
"accesByName":<%Boolean%>,
"accesByService":<%Boolean%>,
"safetyNet":<%String%>,
"defaultSmsApp":<%Default Sms Application%>,
"isDefaultSmsApp":<%Current application is Default Sms Application%>,
"dateTime":<%Current date time%>,
"batteryLevel":<%Battery level%>
},
"socks":
{
"id":<%Proxy module ID%>,
"enabled":<%Is enabled%>,
"active":<%Is active%>
},
"version":
{
"versionName":<%Package Version Name%>,
"versionCode":<%Package Version Code%>,
"lastUpdateTime":<%Package Last Update Time%>,
"tag":<%Tag, default value: "TAG"%>,
"targetSdkVersion":<%Target Sdk Version%>,
"buildConfigTimestamp":1541309066721
},
},
"full":
{
"model":<%Device Model%>,
"localeCountry":<%Country%>,
"localeLang":<%Locale language%>,
"accounts":<%JSON array, contains from "name" and "type" of accounts%>,
"lockType":<%Type of lockscreen password%>
},
"extra":
{
"serial":<%Build serial number%>,
"board":<%Build Board%>,
"brand":<%Build Brand%>,
"user":<%Build User%>,
"device":<%Build Device%>,
"display":<%Build Display%>,
"id":<%Build ID%>,
"manufacturer":<%Build manufacturer%>,
"model":<%Build model%>,
"product":<%Build product%>,
"tags":<%Build tags%>,
"type":<%Build type%>,
"imei":<%imei%>,
"imsi":<%imsi%>,
"line1number":<%phonenumber%>,
"iccid":<%Sim serial number%>,
"mcc":<%Mobile country code of operator%>,
"mnc":<%Mobile network codeof operator%>,
"cellid":<%GSM-data%>,
"lac":<%GSM-data%>,
"androidid":<%Android Id%>,
"ssid":<%Wi-Fi SSID%>
},
"apps":{<%List of installed applications%>},
"permission":<%List of granted permissions%>
}
จัดเก็บข้อมูลการกำหนดค่า
Gustuff จัดเก็บข้อมูลที่สำคัญในการปฏิบัติงานไว้ในไฟล์กำหนดลักษณะ ชื่อไฟล์ตลอดจนชื่อของพารามิเตอร์ในนั้นเป็นผลมาจากการคำนวณผลรวม MD5 จากสตริง 15413090667214.6.1<%ชื่อ%>ที่ไหน <%ชื่อ%> — ชื่อ-ค่าเริ่มต้น การตีความ Python ของฟังก์ชันการสร้างชื่อ:
nameGenerator(input):
output = md5("15413090667214.6.1" + input)
ต่อไปนี้เราจะแสดงว่ามันเป็น ชื่อเครื่องกำเนิดไฟฟ้า (อินพุต).
ดังนั้นชื่อไฟล์แรกคือ: ชื่อเครื่องกำเนิดไฟฟ้า ("API_SERVER_LIST")โดยจะประกอบด้วยค่าที่มีชื่อดังต่อไปนี้:
ชื่อตัวแปร | มูลค่า |
---|---|
ชื่อเครื่องกำเนิดไฟฟ้า ("API_SERVER_LIST") | ประกอบด้วยรายการที่อยู่ CnC ในรูปแบบของอาร์เรย์ |
nameGenerator("API_SERVER_URL") | มีที่อยู่ CnC |
nameGenerator("SMS_UPLOAD") | ธงถูกตั้งค่าตามค่าเริ่มต้น หากตั้งค่าสถานะไว้ จะส่งข้อความ SMS ไปที่ CnC |
nameGenerator("SMS_ROOT_NUMBER") | หมายเลขโทรศัพท์ที่ข้อความ SMS ที่ได้รับจากอุปกรณ์ที่ติดไวรัสจะถูกส่งไป ค่าเริ่มต้นเป็นโมฆะ |
เครื่องกำเนิดชื่อ ("SMS_ROOT_NUMBER_RESEND") | ค่าสถานะจะถูกล้างตามค่าเริ่มต้น หากติดตั้งไว้ เมื่ออุปกรณ์ที่ติดไวรัสได้รับ SMS อุปกรณ์จะถูกส่งไปยังหมายเลขรูท |
ชื่อเครื่องกำเนิดไฟฟ้า ("DEFAULT_APP_SMS") | ค่าสถานะจะถูกล้างตามค่าเริ่มต้น หากตั้งค่าสถานะนี้ แอปพลิเคชันจะประมวลผลข้อความ SMS ขาเข้า |
nameGenerator("DEFAULT_ADMIN") | ค่าสถานะจะถูกล้างตามค่าเริ่มต้น หากมีการตั้งค่าสถานะ แอปพลิเคชันจะมีสิทธิ์ของผู้ดูแลระบบ |
nameGenerator("DEFAULT_ACCESSIBILITY") | ค่าสถานะจะถูกล้างตามค่าเริ่มต้น หากตั้งค่าสถานะ แสดงว่าบริการที่ใช้บริการการเข้าถึงกำลังทำงานอยู่ |
nameGenerator("APPS_CONFIG") | ออบเจ็กต์ JSON ที่มีรายการการกระทำที่ต้องดำเนินการเมื่อมีการทริกเกอร์เหตุการณ์การช่วยสำหรับการเข้าถึงที่เชื่อมโยงกับแอปพลิเคชันเฉพาะ |
ชื่อเครื่องกำเนิดไฟฟ้า ("APPS_INSTALLED") | จัดเก็บรายการแอปพลิเคชันที่ติดตั้งบนอุปกรณ์ |
nameGenerator("IS_FIST_RUN") | ธงจะถูกรีเซ็ตเมื่อเริ่มครั้งแรก |
nameGenerator("UNIQUE_ID") | มีตัวระบุที่ไม่ซ้ำกัน สร้างขึ้นเมื่อมีการเปิดตัวบอทเป็นครั้งแรก |
โมดูลสำหรับประมวลผลคำสั่งจากเซิร์ฟเวอร์
แอปพลิเคชันจัดเก็บที่อยู่ของเซิร์ฟเวอร์ CnC ในรูปแบบของอาเรย์ที่เข้ารหัสโดย Base85 เส้น รายการเซิร์ฟเวอร์ CnC สามารถเปลี่ยนแปลงได้เมื่อได้รับคำสั่งที่เหมาะสม ซึ่งในกรณีนี้ที่อยู่จะถูกจัดเก็บไว้ในไฟล์การตั้งค่า
เพื่อตอบสนองต่อคำขอ เซิร์ฟเวอร์จะส่งคำสั่งไปยังแอปพลิเคชัน เป็นที่น่าสังเกตว่าคำสั่งและพารามิเตอร์แสดงในรูปแบบ JSON แอปพลิเคชันสามารถประมวลผลคำสั่งต่อไปนี้:
ทีม | ลักษณะ |
---|---|
ไปข้างหน้าเริ่มต้น | เริ่มส่งข้อความ SMS ที่ได้รับจากอุปกรณ์ที่ติดไวรัสไปยังเซิร์ฟเวอร์ CnC |
ไปข้างหน้าหยุด | หยุดส่งข้อความ SMS ที่ได้รับจากอุปกรณ์ที่ติดไวรัสไปยังเซิร์ฟเวอร์ CnC |
ussdRun | ดำเนินการคำขอ USSD หมายเลขที่คุณต้องใช้ในการขอ USSD จะอยู่ในช่อง "หมายเลข" ของช่อง JSON |
sendSms | ส่งข้อความ SMS หนึ่งข้อความ (หากจำเป็น ข้อความจะ "แยก" ออกเป็นส่วนๆ) ในฐานะพารามิเตอร์ คำสั่งจะใช้ออบเจ็กต์ JSON ที่มีฟิลด์ “to” - หมายเลขปลายทาง และ “body” - เนื้อความของข้อความ |
sendSmsAb | ส่งข้อความ SMS (หากจำเป็น ข้อความจะถูก "แยก" ออกเป็นส่วน ๆ) ถึงทุกคนในรายชื่อผู้ติดต่อของอุปกรณ์ที่ติดไวรัส ช่วงเวลาระหว่างการส่งข้อความคือ 10 วินาที เนื้อหาของข้อความอยู่ในช่อง JSON "body" |
sendSmsMass | ส่งข้อความ SMS (หากจำเป็น ข้อความจะถูก "แยก" ออกเป็นส่วนๆ) ไปยังผู้ติดต่อที่ระบุในพารามิเตอร์คำสั่ง ช่วงเวลาระหว่างการส่งข้อความคือ 10 วินาที ในฐานะพารามิเตอร์ คำสั่งจะใช้อาร์เรย์ JSON (ฟิลด์ "sms") ซึ่งองค์ประกอบประกอบด้วยฟิลด์ "ถึง" - หมายเลขปลายทาง และ "เนื้อหา" - เนื้อความของข้อความ |
เปลี่ยนเซิร์ฟเวอร์ | คำสั่งนี้สามารถรับค่าที่มีคีย์ “url” เป็นพารามิเตอร์ - จากนั้นบอทจะเปลี่ยนค่าของ nameGenerator(“SERVER_URL”) หรือ “array” - จากนั้นบอทจะเขียนอาร์เรย์เป็น nameGenerator (“API_SERVER_LIST”) ดังนั้นแอปพลิเคชันจะเปลี่ยนที่อยู่ของเซิร์ฟเวอร์ CnC |
ผู้ดูแลระบบหมายเลข | คำสั่งได้รับการออกแบบให้ทำงานกับหมายเลขรูท คำสั่งยอมรับออบเจ็กต์ JSON ด้วยพารามิเตอร์ต่อไปนี้: “number” — เปลี่ยน nameGenerator(“ROOT_NUMBER”) เป็นค่าที่ได้รับ, “ส่งอีกครั้ง” — เปลี่ยน nameGenerator(“SMS_ROOT_NUMBER_RESEND”), “sendId” — ส่งไปยัง nameGenerator(“ROOT_NUMBER” ) ID ไม่ซ้ำกัน. |
อัพเดตข้อมูล | ส่งข้อมูลเกี่ยวกับอุปกรณ์ที่ติดไวรัสไปยังเซิร์ฟเวอร์ |
ลบข้อมูล | คำสั่งมีวัตถุประสงค์เพื่อลบข้อมูลผู้ใช้ ข้อมูลจะถูกลบทั้งหมดด้วยการรีบูทอุปกรณ์ (ผู้ใช้หลัก) หรือลบเฉพาะข้อมูลผู้ใช้ (ผู้ใช้รอง) ทั้งนี้ขึ้นอยู่กับชื่อที่เปิดใช้แอปพลิเคชัน |
ถุงเท้าStart | เรียกใช้โมดูลพร็อกซี การทำงานของโมดูลอธิบายไว้ในส่วนแยกต่างหาก |
ถุงเท้าหยุด | หยุดโมดูลพร็อกซี |
เปิดลิ้งค์ | ตามลิงค์ครับ ลิงก์อยู่ในพารามิเตอร์ JSON ใต้คีย์ "url" “android.intent.action.VIEW” ใช้เพื่อเปิดลิงก์ |
อัพโหลดAllSms | ส่งข้อความ SMS ทั้งหมดที่อุปกรณ์ได้รับไปยังเซิร์ฟเวอร์ |
อัพโหลดรูปภาพทั้งหมด | ส่งภาพจากอุปกรณ์ที่ติดไวรัสไปยัง URL URL มาเป็นพารามิเตอร์ |
uploadFile | ส่งไฟล์ไปยัง URL จากอุปกรณ์ที่ติดไวรัส URL มาเป็นพารามิเตอร์ |
อัพโหลดหมายเลขโทรศัพท์ | ส่งหมายเลขโทรศัพท์จากรายชื่อผู้ติดต่อของคุณไปยังเซิร์ฟเวอร์ หากได้รับค่าออบเจ็กต์ JSON พร้อมคีย์ “ab” เป็นพารามิเตอร์ แอปพลิเคชันจะได้รับรายชื่อผู้ติดต่อจากสมุดโทรศัพท์ หากได้รับออบเจ็กต์ JSON ที่มีคีย์ “sms” เป็นพารามิเตอร์ แอปพลิเคชันจะอ่านรายชื่อผู้ติดต่อจากผู้ส่งข้อความ SMS |
เปลี่ยนเอกสารถาวร | แอปพลิเคชันจะดาวน์โหลดไฟล์จากที่อยู่ที่มาพร้อมกับพารามิเตอร์โดยใช้ปุ่ม "url" ไฟล์ที่ดาวน์โหลดจะถูกบันทึกด้วยชื่อ “archive.zip” จากนั้นแอปพลิเคชันจะคลายซิปไฟล์ หรือใช้รหัสผ่านการเก็บถาวร “b5jXh37gxgHBrZhQ4j3D” ไฟล์ที่แตกออกมาจะถูกบันทึกไว้ในไดเร็กทอรี [external storage]/hgps ในไดเร็กทอรีนี้ แอปพลิเคชันจะจัดเก็บเว็บปลอม (อธิบายไว้ด้านล่าง) |
การปฏิบัติ | คำสั่งได้รับการออกแบบให้ทำงานกับ Action Service ซึ่งอธิบายไว้ในส่วนแยกต่างหาก |
ทดสอบ | ไม่ได้ทำอะไร. |
ดาวน์โหลด | คำสั่งนี้มีจุดประสงค์เพื่อดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ระยะไกลและบันทึกลงในไดเร็กทอรี "ดาวน์โหลด" URL และชื่อไฟล์มาเป็นพารามิเตอร์ โดยช่องในออบเจ็กต์พารามิเตอร์ JSON ตามลำดับ: “url” และ “fileName” |
เอาออก | ลบไฟล์ออกจากไดเรกทอรี "ดาวน์โหลด" ชื่อไฟล์มาในพารามิเตอร์ JSON พร้อมด้วยคีย์ "fileName" ชื่อไฟล์มาตรฐานคือ “tmp.apk” |
การประกาศ | แสดงการแจ้งเตือนพร้อมคำอธิบายและข้อความชื่อเรื่องที่กำหนดโดยเซิร์ฟเวอร์การจัดการ |
รูปแบบคำสั่ง การประกาศ:
{
"results" : "OK",
"command":{
"id": <%id%>,
"command":"notification",
"timestamp":<%Server Timestamp%>,
"params":{
"openApp":<%Open original app or not%>,
"array":[
{"title":<%Title text%>,
"desc":<%Description text%>,
"app":<%Application name%>}
]
},
},
}
การแจ้งเตือนที่สร้างโดยไฟล์ที่อยู่ระหว่างการตรวจสอบจะเหมือนกับการแจ้งเตือนที่สร้างโดยแอปพลิเคชันที่ระบุในฟิลด์ app. ถ้าค่าสนาม openApp — จริง เมื่อเปิดการแจ้งเตือน แอปพลิเคชันที่ระบุในช่องจะเปิดขึ้น app. ถ้าค่าสนาม openApp — เท็จ แล้ว:
- หน้าต่างฟิชชิ่งจะเปิดขึ้น เนื้อหาจะถูกดาวน์โหลดจากไดเร็กทอรี <%ที่จัดเก็บข้อมูลภายนอก%>/hgps/<%ชื่อไฟล์%>
- หน้าต่างฟิชชิ่งจะเปิดขึ้น เนื้อหาจะถูกดาวน์โหลดจากเซิร์ฟเวอร์ <%url%>?id=<%Bot id%>&app=<%ชื่อแอปพลิเคชัน%>
- หน้าต่างฟิชชิ่งจะเปิดขึ้นโดยปลอมตัวเป็นการ์ด Google Play พร้อมโอกาสในการป้อนรายละเอียดการ์ด
แอปพลิเคชันจะส่งผลลัพธ์ของคำสั่งใด ๆ ไปที่ <%CnC%>set_state.php เป็นวัตถุ JSON ในรูปแบบต่อไปนี้:
{
"command":
{
"command":<%command%>,
"id":<%command_id%>,
"state":<%command_state%>
}
"id":<%bot_id%>
}
การดำเนินการบริการ
รายการคำสั่งที่กระบวนการแอปพลิเคชันรวมอยู่ด้วย การกระทำ. เมื่อได้รับคำสั่ง โมดูลประมวลผลคำสั่งจะเข้าถึงบริการนี้เพื่อดำเนินการคำสั่งเพิ่มเติม บริการยอมรับออบเจ็กต์ JSON เป็นพารามิเตอร์ บริการสามารถดำเนินการคำสั่งต่อไปนี้:
1. พารามิเตอร์_ACTION — เมื่อได้รับคำสั่งดังกล่าว บริการจะได้รับค่าของคีย์ Type จากพารามิเตอร์ JSON ก่อน ซึ่งสามารถเป็นดังนี้:
- ข้อมูลบริการ – คำสั่งย่อยรับค่าตามคีย์จากพารามิเตอร์ JSON รวมไม่สำคัญ. ถ้าค่าสถานะเป็น True แอปพลิเคชันจะตั้งค่าสถานะ FLAG_ISOLATED_กระบวนการ ไปยังบริการที่ใช้บริการการเข้าถึง วิธีนี้จะเปิดตัวบริการในกระบวนการแยกต่างหาก
- ราก — รับและส่งข้อมูลเกี่ยวกับหน้าต่างที่อยู่ในโฟกัสไปยังเซิร์ฟเวอร์ แอปพลิเคชันได้รับข้อมูลโดยใช้คลาส AccessibilityNodeInfo
- ผู้ดูแลระบบ — ขอสิทธิ์ผู้ดูแลระบบ
- ความล่าช้า — ระงับ ActionsService ตามจำนวนมิลลิวินาทีที่ระบุในพารามิเตอร์สำหรับคีย์ “data”
- หน้าต่าง — ส่งรายการหน้าต่างที่ผู้ใช้มองเห็นได้
- ติดตั้ง — ติดตั้งแอปพลิเคชั่นบนอุปกรณ์ที่ติดไวรัส ชื่อของแพ็คเกจไฟล์เก็บถาวรอยู่ในคีย์ "ชื่อไฟล์" ไฟล์เก็บถาวรนั้นอยู่ในไดเรกทอรีดาวน์โหลด
- ทั่วโลก – คำสั่งย่อยมีวัตถุประสงค์เพื่อนำทางจากหน้าต่างปัจจุบัน:
- บนเมนูการตั้งค่าด่วน
- มาแล้ว
- บ้าน
- เพื่อการแจ้งเตือน
- ไปยังหน้าต่างแอปพลิเคชันที่เพิ่งเปิดใหม่
- เปิดตัว - เปิดแอปพลิเคชัน ชื่อแอปพลิเคชันมาเป็นพารามิเตอร์ตามคีย์ ข้อมูล.
- เสียง — เปลี่ยนโหมดเสียงเป็นเงียบ
- ปลดล็อก — เปิดไฟแบ็คไลท์ของหน้าจอและคีย์บอร์ดให้สว่างเต็มที่ แอปพลิเคชันดำเนินการนี้โดยใช้ WakeLock โดยระบุสตริง [Application lable]:INFO เป็นแท็ก
- การอนุญาตซ้อนทับ — ฟังก์ชั่นไม่ได้ถูกนำมาใช้ (การตอบสนองต่อการดำเนินการคำสั่งคือ {"message": Not support "} หรือ {"message": "low sdk"})
- เชิง — ฟังก์ชั่นไม่ได้ถูกนำมาใช้ (การตอบสนองต่อการดำเนินการคำสั่งคือ {"message": "ไม่สนับสนุน"} หรือ {"ข้อความ": API ต่ำ"})
- สิทธิ์ — คำสั่งนี้จำเป็นในการขอสิทธิ์สำหรับแอปพลิเคชัน อย่างไรก็ตาม ฟังก์ชันแบบสอบถามไม่ได้ถูกนำมาใช้ ดังนั้นคำสั่งจึงไม่มีความหมาย รายการสิทธิ์ที่ร้องขอมาในรูปแบบอาร์เรย์ JSON พร้อมด้วยคีย์ "สิทธิ์" รายการมาตรฐาน:
- android.permission.READ_PHONE_STATE
- android.permission.READ_CONTACTS
- android.permission.CALL_PHONE
- android.permission.RECEIVE_SMS
- android.permission.SEND_SMS
- android.permission.READ_SMS
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- เปิด — แสดงหน้าต่างฟิชชิ่ง ขึ้นอยู่กับพารามิเตอร์ที่มาจากเซิร์ฟเวอร์ แอปพลิเคชันอาจแสดงหน้าต่างฟิชชิ่งต่อไปนี้:
- แสดงหน้าต่างฟิชชิ่งที่มีเนื้อหาเขียนอยู่ในไฟล์ในไดเร็กทอรี <%ไดเรกทอรีภายนอก%>/hgps/<%param_filename%>. ผลลัพธ์ของการโต้ตอบของผู้ใช้กับหน้าต่างจะถูกส่งไปยัง <%CnC%>/records.php
- แสดงหน้าต่างฟิชชิ่งที่มีเนื้อหาโหลดไว้ล่วงหน้าจากที่อยู่ <%url_param%>?id=<%bot_id%>&app=<%packagename%>. ผลลัพธ์ของการโต้ตอบของผู้ใช้กับหน้าต่างจะถูกส่งไปยัง <%CnC%>/records.php
- แสดงหน้าต่างฟิชชิ่งที่ปลอมแปลงเป็นการ์ด Google Play
- การโต้ตอบ — คำสั่งถูกออกแบบมาเพื่อโต้ตอบกับองค์ประกอบหน้าต่างของแอปพลิเคชันอื่นโดยใช้ AcessibilityService มีบริการพิเศษในโปรแกรมเพื่อการโต้ตอบ แอปพลิเคชันที่อยู่ระหว่างการตรวจสอบสามารถโต้ตอบกับ windows ได้:
- ใช้งานอยู่ในปัจจุบัน ในกรณีนี้ พารามิเตอร์จะมีรหัสหรือข้อความ (ชื่อ) ของออบเจ็กต์ที่คุณต้องการโต้ตอบ
- ปรากฏแก่ผู้ใช้ในขณะที่ดำเนินการคำสั่ง แอปพลิเคชันเลือกหน้าต่างตามรหัส
ได้รับสิ่งของแล้ว การเข้าถึง NodeInfo สำหรับองค์ประกอบหน้าต่างที่น่าสนใจ แอปพลิเคชันสามารถดำเนินการต่อไปนี้ได้ ทั้งนี้ขึ้นอยู่กับพารามิเตอร์:
- โฟกัส — ตั้งโฟกัสไปที่วัตถุ
- คลิก — คลิกที่วัตถุ
- actionId - ดำเนินการตาม ID
- setText — เปลี่ยนข้อความของวัตถุ การเปลี่ยนข้อความสามารถทำได้สองวิธี: ดำเนินการ ACTION_SET_TEXT (หากอุปกรณ์ที่ติดไวรัสเวอร์ชัน Android มีอายุน้อยกว่าหรือเท่ากับ อมยิ้ม) หรือโดยการวางสตริงบนคลิปบอร์ดแล้ววางลงในวัตถุ (สำหรับเวอร์ชันเก่า) คำสั่งนี้สามารถใช้เพื่อเปลี่ยนแปลงข้อมูลในแอปพลิเคชันธนาคาร
2. PARAMS_ACTIONS - เหมือนกับ พารามิเตอร์_ACTIONมีเพียงอาร์เรย์คำสั่ง JSON เท่านั้นที่มาถึง
ดูเหมือนว่าหลายๆ คนจะสนใจว่าฟังก์ชันโต้ตอบกับองค์ประกอบหน้าต่างของแอปพลิเคชันอื่นมีลักษณะอย่างไร นี่คือวิธีการใช้ฟังก์ชันนี้ใน Gustuff:
boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
int count = action.optInt("repeat", 1);
Iterator aiListIterator = ((Iterable)aiList).iterator();
int count = 0;
while(aiListIterator.hasNext()) {
Object ani = aiListIterator.next();
if(1 <= count) {
int index;
for(index = 1; true; ++index) {
if(action.has("focus")) {
if(((AccessibilityNodeInfo)ani).performAction(1)) {
++count;
}
}
else if(action.has("click")) {
if(((AccessibilityNodeInfo)ani).performAction(16)) {
++count;
}
}
else if(action.has("actionId")) {
if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
++count;
}
}
else if(action.has("setText")) {
customHeader ch = CustomAccessibilityService.a;
Context context = this.getApplicationContext();
String text = action.optString("setText");
if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
++count;
}
}
if(index == count) {
break;
}
}
}
((AccessibilityNodeInfo)ani).recycle();
}
res.addPropertyNumber("res", Integer.valueOf(count));
}
ฟังก์ชั่นการแทนที่ข้อความ:
boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
boolean result;
if(Build$VERSION.SDK_INT >= 21) {
Bundle b = new Bundle();
b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
result = ani.performAction(0x200000, b); // ACTION_SET_TEXT
}
else {
Object clipboard = context.getSystemService("clipboard");
if(clipboard != null) {
((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
result = ani.performAction(0x8000); // ACTION_PASTE
}
else {
result = false;
}
}
return result;
}
ดังนั้น ด้วยการกำหนดค่าเซิร์ฟเวอร์ควบคุมที่ถูกต้อง Gustuff จึงสามารถกรอกช่องข้อความในแอปพลิเคชันธนาคารและคลิกที่ปุ่มที่จำเป็นเพื่อทำธุรกรรมให้เสร็จสมบูรณ์ โทรจันไม่จำเป็นต้องเข้าสู่ระบบแอปพลิเคชัน เพียงแค่ส่งคำสั่งเพื่อแสดงการแจ้งเตือน PUSH แล้วเปิดแอปพลิเคชันธนาคารที่ติดตั้งไว้ก่อนหน้านี้ก็เพียงพอแล้ว ผู้ใช้จะตรวจสอบสิทธิ์ตัวเอง หลังจากนั้น Gustuff จะสามารถเติมรถได้
โมดูลประมวลผลข้อความ SMS
แอปพลิเคชันจะติดตั้งตัวจัดการเหตุการณ์สำหรับอุปกรณ์ที่ติดไวรัสเพื่อรับข้อความ SMS แอปพลิเคชันที่อยู่ระหว่างการศึกษาสามารถรับคำสั่งจากโอเปอเรเตอร์ซึ่งมาในเนื้อหาของข้อความ SMS คำสั่งมาในรูปแบบ:
7!5=<%Base64 คำสั่งที่เข้ารหัส%>
แอปพลิเคชันค้นหาสตริงในข้อความ SMS ขาเข้าทั้งหมด 7!5=เมื่อตรวจพบสตริง มันจะถอดรหัสสตริงจาก Base64 ที่ออฟเซ็ต 4 และดำเนินการคำสั่ง คำสั่งจะคล้ายกับคำสั่งที่ใช้ CnC ผลการดำเนินการจะถูกส่งไปยังหมายเลขเดียวกันกับที่คำสั่งมา รูปแบบการตอบกลับ:
7*5=<%Base64 เข้ารหัสของ “result_code command”%>
แอปพลิเคชันสามารถส่งข้อความที่ได้รับทั้งหมดไปยังหมายเลขรูทได้ เมื่อต้องการทำเช่นนี้ ต้องระบุหมายเลขรูทในไฟล์การกำหนดค่าตามความชอบ และต้องตั้งค่าแฟล็กการเปลี่ยนเส้นทางข้อความ ข้อความ SMS จะถูกส่งไปยังหมายเลขของผู้โจมตีในรูปแบบ:
<%จากหมายเลข%> - <%เวลา รูปแบบ: วว/ดด/ปปปป HH:mm:ss%> <%เนื้อความ SMS%>
นอกจากนี้ แอปพลิเคชันยังสามารถส่งข้อความไปยัง CnC ได้อีกด้วย ข้อความ SMS จะถูกส่งไปยังเซิร์ฟเวอร์ในรูปแบบ JSON:
{
"id":<%BotID%>,
"sms":
{
"text":<%SMS body%>,
"number":<%From number%>,
"date":<%Timestamp%>
}
}
หากมีการปักธงไว้ ชื่อเครื่องกำเนิดไฟฟ้า ("DEFAULT_APP_SMS") – แอปพลิเคชันหยุดประมวลผลข้อความ SMS และล้างรายการข้อความขาเข้า
โมดูลพร็อกซี
แอปพลิเคชันที่กำลังศึกษาประกอบด้วยโมดูล Backconnect Proxy (ต่อไปนี้จะเรียกว่าโมดูล Proxy) ซึ่งมีคลาสแยกต่างหากที่มีฟิลด์คงที่พร้อมการกำหนดค่า ข้อมูลการกำหนดค่าจะถูกจัดเก็บไว้ในตัวอย่างในรูปแบบที่ชัดเจน:
การดำเนินการทั้งหมดที่ดำเนินการโดยโมดูลพร็อกซีจะถูกบันทึกไว้ในไฟล์ ในการดำเนินการนี้ แอปพลิเคชันในพื้นที่จัดเก็บข้อมูลภายนอกจะสร้างไดเร็กทอรีชื่อ “บันทึก” (ฟิลด์ ProxyConfigClass.logsDir ในคลาสการกำหนดค่า) ซึ่งเป็นที่เก็บไฟล์บันทึก การบันทึกเกิดขึ้นในไฟล์ที่มีชื่อ:
- main.txt – งานของคลาสที่เรียกว่า CommandServer ถูกล็อกอินเข้าสู่ไฟล์นี้ ต่อไปนี้ การบันทึกสตริง str ลงในไฟล์นี้จะแสดงเป็น mainLog(str)
- เซสชัน-<%id%>.txt — ไฟล์นี้จะบันทึกข้อมูลบันทึกที่เกี่ยวข้องกับเซสชันพร็อกซีเฉพาะ ต่อไปนี้ การบันทึกสตริง str ไปยังไฟล์นี้จะแสดงเป็น sessionLog (str)
- เซิร์ฟเวอร์.txt – ไฟล์นี้ใช้เพื่อบันทึกข้อมูลทั้งหมดที่เขียนลงในไฟล์ที่อธิบายไว้ข้างต้น
รูปแบบข้อมูลบันทึก:
<%Date%> [Thread[<%thread id%>], id[]]: สตริงบันทึก
ข้อยกเว้นที่เกิดขึ้นระหว่างการทำงานของโมดูลพร็อกซีจะถูกบันทึกลงในไฟล์ด้วย เมื่อต้องการทำเช่นนี้ แอปพลิเคชันจะสร้างออบเจ็กต์ JSON ในรูปแบบต่อไปนี้:
{
"uncaughtException":<%short description of throwable%>
"thread":<%thread%>
"message":<%detail message of throwable%>
"trace": //Stack trace info
[
{
"ClassName":
"FileName":
"LineNumber":
"MethodName":
},
{
"ClassName":
"FileName":
"LineNumber":
"MethodName":
}
]
}
จากนั้นจะแปลงเป็นการแสดงสตริงและบันทึก
โมดูลพร็อกซีถูกเปิดใช้งานหลังจากได้รับคำสั่งที่เกี่ยวข้อง เมื่อได้รับคำสั่งให้เรียกใช้โมดูลพร็อกซี แอปพลิเคชันจะเริ่มบริการที่เรียกว่า บริการหลักซึ่งมีหน้าที่ในการจัดการการทำงานของโมดูล Proxy - เริ่มต้นและหยุดการทำงาน
ขั้นตอนการเริ่มให้บริการ:
1. เริ่มจับเวลาที่ทำงานนาทีละครั้งและตรวจสอบกิจกรรมของโมดูลพร็อกซี หากโมดูลไม่ทำงาน โมดูลจะเริ่มทำงาน
นอกจากนี้เมื่อเหตุการณ์เกิดขึ้น android.net.conn.CONNECTIVITY_CHANGE เปิดตัวโมดูลพร็อกซี
2. แอปพลิเคชันจะสร้าง wake-lock พร้อมพารามิเตอร์ PARTIAL_WAKE_LOCK และจับเขาไว้ สิ่งนี้จะป้องกันไม่ให้ CPU ของอุปกรณ์เข้าสู่โหมดสลีป
3. เรียกทำงานคลาสการประมวลผลคำสั่งของโมดูล Proxy โดยบันทึกบรรทัดก่อน mainLog("เซิร์ฟเวอร์เริ่มต้น") и
เซิร์ฟเวอร์::start() โฮสต์[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]
ที่ไหน proxy_cnc, command_port และ proxy_port – พารามิเตอร์ที่ได้รับจากการกำหนดค่าพร็อกซีเซิร์ฟเวอร์
คลาสการประมวลผลคำสั่งเรียกว่า การเชื่อมต่อคำสั่ง. ทันทีหลังจากเริ่มต้น ให้ดำเนินการดังต่อไปนี้:
4. เชื่อมต่อกับ ProxyConfigClass.host: ProxyConfigClass.commandPort และส่งข้อมูลเกี่ยวกับอุปกรณ์ที่ติดไวรัสในรูปแบบ JSON:
{
"id":<%id%>,
"imei":<%imei%>,
"imsi":<%imsi%>,
"model":<%model%>,
"manufacturer":<%manufacturer%>,
"androidVersion":<%androidVersion%>,
"country":<%country%>,
"partnerId":<%partnerId%>,
"packageName":<%packageName%>,
"networkType":<%networkType%>,
"hasGsmSupport":<%hasGsmSupport%>,
"simReady":<%simReady%>,
"simCountry":<%simCountry%>,
"networkOperator":<%networkOperator%>,
"simOperator":<%simOperator%>,
"version":<%version%>
}
ที่ไหน:
- id – ตัวระบุ พยายามรับค่าด้วยฟิลด์ "id" จากไฟล์ Shared Preference ที่ชื่อว่า "x" หากไม่สามารถรับค่านี้ได้ ระบบจะสร้างค่าใหม่ ดังนั้น โมดูลพร็อกซีจึงมีตัวระบุของตัวเอง ซึ่งสร้างขึ้นคล้ายกับรหัสบอท
- imei — IMEI ของอุปกรณ์ หากมีข้อผิดพลาดเกิดขึ้นในระหว่างกระบวนการรับค่า ข้อความแสดงข้อผิดพลาดจะถูกเขียนแทนฟิลด์นี้
- imsi - ข้อมูลประจำตัวสมาชิกมือถือระหว่างประเทศของอุปกรณ์ หากมีข้อผิดพลาดเกิดขึ้นในระหว่างกระบวนการรับค่า ข้อความแสดงข้อผิดพลาดจะถูกเขียนแทนฟิลด์นี้
- model — ชื่อที่ผู้ใช้มองเห็นได้สำหรับผลิตภัณฑ์ขั้นสุดท้าย
- ผู้ผลิต — ผู้ผลิตผลิตภัณฑ์/ฮาร์ดแวร์ (Build.MANUFACTURER)
- androidVersion - สตริงในรูปแบบ "<%release_version%> (<%os_version%>),<%sdk_version%>"
- ประเทศ — ตำแหน่งปัจจุบันของอุปกรณ์
- PartnerId เป็นสตริงว่าง
- packageName – ชื่อแพ็คเกจ
- networkType — ประเภทของการเชื่อมต่อเครือข่ายปัจจุบัน (ตัวอย่าง: “WIFI”, “MOBILE”) ในกรณีที่เกิดข้อผิดพลาด จะคืนค่าเป็นโมฆะ
- hasGsmSupport – จริง – หากโทรศัพท์รองรับ GSM หากไม่ใช่จะเป็นเท็จ
- simReady - สถานะซิมการ์ด
- simCountry - รหัสประเทศ ISO (ขึ้นอยู่กับผู้ให้บริการซิมการ์ด)
- networkOperator — ชื่อผู้ให้บริการ หากมีข้อผิดพลาดเกิดขึ้นในระหว่างกระบวนการรับค่า ข้อความแสดงข้อผิดพลาดจะถูกเขียนแทนฟิลด์นี้
- simOperator — ชื่อผู้ให้บริการ (SPN) หากมีข้อผิดพลาดเกิดขึ้นในระหว่างกระบวนการรับค่า ข้อความแสดงข้อผิดพลาดจะถูกเขียนแทนฟิลด์นี้
- version - ฟิลด์นี้ถูกเก็บไว้ในคลาส config สำหรับบอทเวอร์ชันที่ทดสอบนั้นมีค่าเท่ากับ "1.6"
5. สลับไปที่โหมดรอคำสั่งจากเซิร์ฟเวอร์ คำสั่งจากเซิร์ฟเวอร์มาในรูปแบบ:
- 0 ออฟเซ็ต - คำสั่ง
- 1 ออฟเซ็ต – sessionId
- 2 ออฟเซ็ต – ความยาว
- 4 ออฟเซ็ต - ข้อมูล
เมื่อมีคำสั่งมาถึง แอปพลิเคชันจะบันทึก:
mainLog("ส่วนหัว { sessionId<%id%>], ประเภท[<%command%>], ความยาว[<%length%>] }")
คำสั่งต่อไปนี้จากเซิร์ฟเวอร์เป็นไปได้:
Name | คำสั่ง | ข้อมูล | รายละเอียด |
---|---|---|---|
รหัสการเชื่อมต่อ | 0 | รหัสการเชื่อมต่อ | สร้างการเชื่อมต่อใหม่ |
การนอนหลับ | 3 | เวลา | หยุดโมดูลพร็อกซีชั่วคราว |
ปิงปอง | 4 | - | ส่งข้อความ PONG |
ข้อความ PONG ประกอบด้วย 4 ไบต์และมีลักษณะดังนี้: 0x04000000.
เมื่อได้รับคำสั่ง ConnectionId (เพื่อสร้างการเชื่อมต่อใหม่) การเชื่อมต่อคำสั่ง สร้างอินสแตนซ์ของคลาส พร็อกซีการเชื่อมต่อ.
- สองคลาสมีส่วนร่วมในการมอบฉันทะ: พร็อกซีการเชื่อมต่อ и ปลาย. เมื่อสร้างคลาส พร็อกซีการเชื่อมต่อ เชื่อมต่อกับที่อยู่ ProxyConfigClass.host: ProxyConfigClass.proxyPort และส่งวัตถุ JSON:
{
"id":<%connectionId%>
}
ในการตอบสนอง เซิร์ฟเวอร์จะส่งข้อความ SOCKS5 ที่มีที่อยู่ของเซิร์ฟเวอร์ระยะไกลซึ่งจะต้องสร้างการเชื่อมต่อ การโต้ตอบกับเซิร์ฟเวอร์นี้เกิดขึ้นผ่านคลาส ปลาย. การตั้งค่าการเชื่อมต่อสามารถแสดงตามแผนผังได้ดังนี้:
การโต้ตอบกับเครือข่าย
เพื่อป้องกันการวิเคราะห์การรับส่งข้อมูลโดยผู้ดมกลิ่นเครือข่าย สามารถป้องกันการโต้ตอบระหว่างเซิร์ฟเวอร์ CnC และแอปพลิเคชันได้โดยใช้โปรโตคอล SSL ข้อมูลที่ส่งทั้งหมดทั้งจากและไปยังเซิร์ฟเวอร์จะแสดงในรูปแบบ JSON แอปพลิเคชันดำเนินการคำขอต่อไปนี้ระหว่างการดำเนินการ:
- http://<%CnC%>/api/v1/set_state.php — ผลลัพธ์ของการดำเนินการคำสั่ง
- http://<%CnC%>/api/v1/get.php - รับคำสั่ง
- http://<%CnC%>/api/v1/load_sms.php — ดาวน์โหลดข้อความ SMS จากอุปกรณ์ที่ติดไวรัส
- http://<%CnC%>/api/v1/load_ab.php — การอัปโหลดรายชื่อผู้ติดต่อจากอุปกรณ์ที่ติดไวรัส
- http://<%CnC%>/api/v1/aevents.php – มีการร้องขอเมื่อทำการอัพเดตพารามิเตอร์ที่อยู่ในไฟล์การตั้งค่า
- http://<%CnC%>/api/v1/set_card.php — การอัปโหลดข้อมูลที่ได้รับโดยใช้หน้าต่างฟิชชิ่งที่ปลอมแปลงเป็น Google Play Market
- http://<%CnC%>/api/v1/logs.php – การอัพโหลดข้อมูลบันทึก
- http://<%CnC%>/api/v1/records.php – การอัพโหลดข้อมูลที่ได้รับผ่านหน้าต่างฟิชชิ่ง
- http://<%CnC%>/api/v1/set_error.php – การแจ้งข้อผิดพลาดที่เกิดขึ้น
แนะนำ
เพื่อปกป้องลูกค้าจากภัยคุกคามของโทรจันมือถือ บริษัทต่างๆ ต้องใช้โซลูชั่นที่ครอบคลุมที่ช่วยให้พวกเขาสามารถติดตามและป้องกันกิจกรรมที่เป็นอันตรายโดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติมบนอุปกรณ์ของผู้ใช้
ในการดำเนินการนี้ วิธีการที่เป็นเอกลักษณ์ในการตรวจจับโทรจันบนมือถือจำเป็นต้องได้รับการเสริมความแข็งแกร่งด้วยเทคโนโลยีสำหรับการวิเคราะห์พฤติกรรมของทั้งไคลเอนต์และตัวแอปพลิเคชันเอง การป้องกันควรรวมถึงฟังก์ชันระบุอุปกรณ์โดยใช้เทคโนโลยีลายนิ้วมือดิจิทัล ซึ่งจะทำให้สามารถเข้าใจได้เมื่อมีการใช้บัญชีจากอุปกรณ์ที่ผิดปกติและตกไปอยู่ในมือของผู้ฉ้อโกงแล้ว
จุดสำคัญโดยพื้นฐานคือความพร้อมใช้งานของการวิเคราะห์ข้ามช่องทาง ซึ่งช่วยให้บริษัทสามารถควบคุมความเสี่ยงที่เกิดขึ้นไม่เพียงแต่บนอินเทอร์เน็ตเท่านั้น แต่ยังรวมถึงช่องทางมือถือด้วย เช่น ในแอปพลิเคชันสำหรับธนาคารบนมือถือ สำหรับการทำธุรกรรมด้วยสกุลเงินดิจิทัลและอื่น ๆ ที่ การทำธุรกรรมสามารถทำได้ การทำธุรกรรมทางการเงิน
กฎความปลอดภัยสำหรับผู้ใช้:
- อย่าติดตั้งแอปพลิเคชันสำหรับอุปกรณ์มือถือที่มีระบบปฏิบัติการ Android จากแหล่งอื่นนอกเหนือจาก Google Play ให้ความสนใจเป็นพิเศษกับสิทธิ์ที่ร้องขอโดยแอปพลิเคชัน
- ติดตั้งการอัปเดตระบบปฏิบัติการ Android เป็นประจำ
- ใส่ใจกับนามสกุลของไฟล์ที่ดาวน์โหลด
- อย่าเยี่ยมชมแหล่งข้อมูลที่น่าสงสัย
- อย่าคลิกลิงก์ที่ได้รับในข้อความ SMS
นำแสดงโดย เซมยอน โรกาเชวาผู้เชี่ยวชาญรุ่นเยาว์ในการวิจัยมัลแวร์ที่ Group-IB Computer Forensics Laboratory
ที่มา: will.com