Skip to content

Commit af48369

Browse files
authored
Merge pull request #292 from HackTricks-wiki/update_Paved_With_Intent__ROADtools_and_Nation-State_Tact_20260522_143732
Paved With Intent ROADtools and Nation-State Tactics in the ...
2 parents ae1056f + 28650f1 commit af48369

1 file changed

Lines changed: 49 additions & 2 deletions

File tree

src/pentesting-cloud/azure-security/az-enumeration-tools.md

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,9 +469,17 @@ import-module Az
469469

470470
## Automated Post-Exploitation tools
471471

472-
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
472+
### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx
473473

474-
The enumeration of ROADRecon offers information about the configuration of Entra ID, like users, groups, roles, conditional access policies...
474+
ROADtools is one of the main open-source frameworks for Entra ID offensive research. The most relevant components are:
475+
476+
- **`roadrecon`**: tenant discovery and local dataset generation (users, groups, roles, devices, service principals, applications, directory settings).
477+
- **`roadtx`**: token acquisition/exchange, refresh-token reuse, device registration, and PRT workflows.
478+
- **`roadlib`**: lower-level auth/API library used by the other modules.
479+
480+
The collected data is stored in a local SQLite database and can be explored in the ROADrecon web UI, which is useful to map privileged users, role assignments, devices, service principals, and application relationships before planning persistence or lateral movement.
481+
482+
#### ROADrecon collection
475483

476484
```bash
477485
cd ROADTools
@@ -484,6 +492,41 @@ roadrecon gather
484492
roadrecon gui
485493
```
486494

495+
ROADrecon originally targeted Azure AD Graph. As of **May 22, 2026**, the official repository still keeps Microsoft Graph support in the **`msgraph`** branch, and community forks such as **Tom2Byrne/ROADtools** continue updating Graph-based collection. In Graph-capable builds, ROADrecon adds the **`-mg`** switch to enumerate endpoints such as **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, and **`/applications`**.
496+
497+
```bash
498+
# Graph-capable ROADrecon builds
499+
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
500+
roadrecon gather -mg
501+
roadrecon gui
502+
```
503+
504+
#### ROADtx high-value use cases
505+
506+
If you already have valid credentials, a refresh token, or a PRT-derived session, ROADtx is commonly used to:
507+
508+
- **Register a rogue Entra ID device** against **`urn:ms-drs:enterpriseregistration.windows.net`** to obtain device keys/certificates and create durable device-backed access.
509+
- **Exchange/reuse refresh tokens** to get fresh Microsoft Graph or other resource tokens without repeating interactive sign-in.
510+
- **Abuse PRT workflows** to silently mint new access tokens in the background.
511+
512+
A useful hunting clue is that default **`roadtx device`** values have historically been:
513+
514+
- **OS**: `Windows`
515+
- **OS version**: `10.0.19041.928`
516+
- **Name**: `DESKTOP-<RANDOM 8 DIGITS>`
517+
518+
These values are easy to change, so treat them as **weak indicators**. They are still useful when correlated with unusual device registration events, non-corporate naming patterns, suspicious source IPs/geos/ASNs, or scripted user agents.
519+
520+
#### ROADtools opsec / hunting notes
521+
522+
Because ROADtools uses legitimate Microsoft identity APIs, defenders should hunt for the **combination** of token activity, enumeration patterns, and user-agent anomalies instead of expecting malware-like signatures. Useful signals include:
523+
524+
- **Device registration** audit operations such as `Add device`, `Add registered owner to device`, `Add registered user to device`, and `Register device`
525+
- Requests or sign-ins tied to **Device Registration Service**
526+
- Script-like user agents such as **`python-requests`**, **`urllib`**, or **`curl`**
527+
- Bursty Microsoft Graph reads against discovery-heavy endpoints like **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, and **`/applications`**
528+
- Powerful OAuth scopes appearing in audit data, especially **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`**, and **`Policy.ReadWrite.All`**
529+
487530
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
488531

489532
AzureHound is the BloodHound collector for Microsoft Entra ID and Azure. It is a single static Go binary for Windows/Linux/macOS that talks directly to:
@@ -683,6 +726,10 @@ python stormspotter\stormcollector\sscollector.pyz cli
683726

684727
## References
685728
- [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/)
729+
- [Paved With Intent: ROADtools and Nation-State Tactics in the Cloud](https://unit42.paloaltonetworks.com/roadtools-cloud-attacks/)
730+
- [ROADtools repository](https://github.com/dirkjanm/ROADtools)
731+
- [ROADtools msgraph branch](https://github.com/dirkjanm/ROADtools/tree/msgraph)
732+
- [Tom2Byrne/ROADtools](https://github.com/Tom2Byrne/ROADtools)
686733
- [AzureHound repository](https://github.com/SpecterOps/AzureHound)
687734
- [BloodHound repository](https://github.com/SpecterOps/BloodHound)
688735
- [AzureHound Community Edition Flags](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)

0 commit comments

Comments
 (0)