security-tools/README.md

96 lines
3.8 KiB
Markdown
Raw Permalink Normal View History

2026-09-24 17:50:43 +01:00
# security-tools
Suite d'outils de **tests d'intrusion** (pentest) pour l'environnement
de **préproduction Yavsc** (`pschneider.fr`). Outils en **Bash + curl**,
modulaires (un outil par sous-dossier).
> ⚠️ **Autorisation uniquement sur la preprod Yavsc, propriété de
> Paul Schneider.** Aucun outil de ce dépôt ne doit être exécuté
> contre un tiers. Voir [`docs/scope.md`](docs/scope.md).
## Périmètre
La preprod Yavsc est multi-hôtes :
2026-09-24 17:50:43 +01:00
| Hôte | Domaine | Rôle |
|--------------|----------------------------------|------------------------------|
| `Yavsc.Org` | `preprod-yavsc.pschneider.fr` | MVC + IdentityServer (auth) |
| `Yavsc.Api` | `preprod-api.pschneider.fr` | API business (JSON) |
| `Yavsc.Blogs`| `preprod-blogs.pschneider.fr` | Blogs + stockage perso |
2026-09-24 17:50:43 +01:00
Les outils restreignent leurs requêtes à ce périmètre via
`assert_in_scope` (`lib/common.sh`) ; toute dérive vers un autre hôte
est refusée.
## Structure
```
security-tools/
├── README.md # ce fichier
├── targets.example.env # modèle de configuration (à copier)
├── targets.env # VOTRE config (ignoré par git, à créer)
├── .gitignore
├── lib/
│ └── common.sh # bibliothèque partagée (scope, http, logs)
├── docs/
│ └── scope.md # périmètre & autorisation
├── wordlists/ # vos wordlists (ignoré par git)
├── output/ # journaux & résultats (ignoré par git)
└── tools/
├── brute-login/ # bruteforce auth (password spray / énumération)
├── api-fuzzer/ # cartographie d'endpoints & verbes
├── config-scan/ # fichiers de config exposés
└── rate-limit-probe/ # mesure du rate-limiting / lockout
```
## Préparation
1. `cp targets.example.env targets.env`
2. Renseignez dans `targets.env` :
- `TARGET_SCOPE_ACK="yes"` (confirmation d'autorisation) ;
- `TARGET_BASE_URL` et `TARGET_ALLOWED_HOSTS` (pré-remplis pour la
preprod Yavsc) ;
- pour brute-login : `LOGIN_PATH`, `LOGIN_USERNAME`,
`LOGIN_WORDLIST`, `LOGIN_CONTENT_TYPE` ;
- placez votre wordlist dans `wordlists/passwords.txt`.
3. `chmod +x tools/*/*.sh`
## Outils
### brute-login
Teste la robustesse de l'authentification par énumération de mots de
passe sur un utilisateur connu. Supporte JSON (API) et form-urlencoded
(OAuth2 `/connect/token` d'IdentityServer). Voir
[`tools/brute-login/README.md`](tools/brute-login/README.md).
### api-fuzzer
Cartographie les endpoints et verbes autorisés sur les trois hôtes.
Voir [`tools/api-fuzzer/README.md`](tools/api-fuzzer/README.md).
### config-scan
Détecte les fichiers de configuration / surfaces sensibles exposés
(`.git`, `.env`, `appsettings.json`, `swagger`…). Voir
[`tools/config-scan/README.md`](tools/config-scan/README.md).
### rate-limit-probe
Mesure la présence et le seuil d'un rate-limiting / lockout sur
l'endpoint d'auth. Voir
[`tools/rate-limit-probe/README.md`](tools/rate-limit-probe/README.md).
## Précautions
- **Pacing** : `REQUEST_DELAY` (défaut 0.2 s) espace les requêtes. Un
bruteforce n'a pas besoin d'être un déni de service.
- **Secrets** : `targets.env`, `wordlists/`, `output/` ne sont jamais
committés (`.gitignore`).
- **Verdict** : ces outils révèlent des faiblesses réelles — corrigez
ce qu'ils trouvent sur la preprod avant la mise en production.
## Ajouter un outil
1. Créez `tools/<nom>/` avec un script `.sh` + un `README.md`.
2. Sourcez `lib/common.sh` puis appelez `load_target`.
3. Utilisez `http_probe` (qui appelle `assert_in_scope`) pour toute
requête — jamais de `curl` direct hors périmètre.
4. Conservez le nommage des scripts/chemins en **anglais**, la
documentation en **français**.