@etcsec-com/etc-collector 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +60 -0
- package/.env.test.example +33 -0
- package/.github/workflows/ci.yml +83 -0
- package/.github/workflows/release.yml +246 -0
- package/.prettierrc.json +10 -0
- package/CHANGELOG.md +15 -0
- package/Dockerfile +57 -0
- package/LICENSE +190 -0
- package/README.md +194 -0
- package/dist/api/controllers/audit.controller.d.ts +21 -0
- package/dist/api/controllers/audit.controller.d.ts.map +1 -0
- package/dist/api/controllers/audit.controller.js +179 -0
- package/dist/api/controllers/audit.controller.js.map +1 -0
- package/dist/api/controllers/auth.controller.d.ts +16 -0
- package/dist/api/controllers/auth.controller.d.ts.map +1 -0
- package/dist/api/controllers/auth.controller.js +146 -0
- package/dist/api/controllers/auth.controller.js.map +1 -0
- package/dist/api/controllers/export.controller.d.ts +27 -0
- package/dist/api/controllers/export.controller.d.ts.map +1 -0
- package/dist/api/controllers/export.controller.js +80 -0
- package/dist/api/controllers/export.controller.js.map +1 -0
- package/dist/api/controllers/health.controller.d.ts +5 -0
- package/dist/api/controllers/health.controller.d.ts.map +1 -0
- package/dist/api/controllers/health.controller.js +16 -0
- package/dist/api/controllers/health.controller.js.map +1 -0
- package/dist/api/controllers/jobs.controller.d.ts +13 -0
- package/dist/api/controllers/jobs.controller.d.ts.map +1 -0
- package/dist/api/controllers/jobs.controller.js +125 -0
- package/dist/api/controllers/jobs.controller.js.map +1 -0
- package/dist/api/controllers/providers.controller.d.ts +15 -0
- package/dist/api/controllers/providers.controller.d.ts.map +1 -0
- package/dist/api/controllers/providers.controller.js +112 -0
- package/dist/api/controllers/providers.controller.js.map +1 -0
- package/dist/api/dto/AuditRequest.dto.d.ts +6 -0
- package/dist/api/dto/AuditRequest.dto.d.ts.map +1 -0
- package/dist/api/dto/AuditRequest.dto.js +3 -0
- package/dist/api/dto/AuditRequest.dto.js.map +1 -0
- package/dist/api/dto/AuditResponse.dto.d.ts +17 -0
- package/dist/api/dto/AuditResponse.dto.d.ts.map +1 -0
- package/dist/api/dto/AuditResponse.dto.js +3 -0
- package/dist/api/dto/AuditResponse.dto.js.map +1 -0
- package/dist/api/dto/TokenRequest.dto.d.ts +6 -0
- package/dist/api/dto/TokenRequest.dto.d.ts.map +1 -0
- package/dist/api/dto/TokenRequest.dto.js +3 -0
- package/dist/api/dto/TokenRequest.dto.js.map +1 -0
- package/dist/api/dto/TokenResponse.dto.d.ts +12 -0
- package/dist/api/dto/TokenResponse.dto.d.ts.map +1 -0
- package/dist/api/dto/TokenResponse.dto.js +3 -0
- package/dist/api/dto/TokenResponse.dto.js.map +1 -0
- package/dist/api/middlewares/authenticate.d.ts +12 -0
- package/dist/api/middlewares/authenticate.d.ts.map +1 -0
- package/dist/api/middlewares/authenticate.js +141 -0
- package/dist/api/middlewares/authenticate.js.map +1 -0
- package/dist/api/middlewares/errorHandler.d.ts +3 -0
- package/dist/api/middlewares/errorHandler.d.ts.map +1 -0
- package/dist/api/middlewares/errorHandler.js +30 -0
- package/dist/api/middlewares/errorHandler.js.map +1 -0
- package/dist/api/middlewares/rateLimit.d.ts +3 -0
- package/dist/api/middlewares/rateLimit.d.ts.map +1 -0
- package/dist/api/middlewares/rateLimit.js +34 -0
- package/dist/api/middlewares/rateLimit.js.map +1 -0
- package/dist/api/middlewares/validate.d.ts +4 -0
- package/dist/api/middlewares/validate.d.ts.map +1 -0
- package/dist/api/middlewares/validate.js +31 -0
- package/dist/api/middlewares/validate.js.map +1 -0
- package/dist/api/routes/audit.routes.d.ts +5 -0
- package/dist/api/routes/audit.routes.d.ts.map +1 -0
- package/dist/api/routes/audit.routes.js +24 -0
- package/dist/api/routes/audit.routes.js.map +1 -0
- package/dist/api/routes/auth.routes.d.ts +6 -0
- package/dist/api/routes/auth.routes.d.ts.map +1 -0
- package/dist/api/routes/auth.routes.js +22 -0
- package/dist/api/routes/auth.routes.js.map +1 -0
- package/dist/api/routes/export.routes.d.ts +5 -0
- package/dist/api/routes/export.routes.d.ts.map +1 -0
- package/dist/api/routes/export.routes.js +16 -0
- package/dist/api/routes/export.routes.js.map +1 -0
- package/dist/api/routes/health.routes.d.ts +4 -0
- package/dist/api/routes/health.routes.d.ts.map +1 -0
- package/dist/api/routes/health.routes.js +11 -0
- package/dist/api/routes/health.routes.js.map +1 -0
- package/dist/api/routes/index.d.ts +10 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/index.js +20 -0
- package/dist/api/routes/index.js.map +1 -0
- package/dist/api/routes/providers.routes.d.ts +5 -0
- package/dist/api/routes/providers.routes.d.ts.map +1 -0
- package/dist/api/routes/providers.routes.js +13 -0
- package/dist/api/routes/providers.routes.js.map +1 -0
- package/dist/api/validators/audit.schemas.d.ts +60 -0
- package/dist/api/validators/audit.schemas.d.ts.map +1 -0
- package/dist/api/validators/audit.schemas.js +55 -0
- package/dist/api/validators/audit.schemas.js.map +1 -0
- package/dist/api/validators/auth.schemas.d.ts +17 -0
- package/dist/api/validators/auth.schemas.d.ts.map +1 -0
- package/dist/api/validators/auth.schemas.js +21 -0
- package/dist/api/validators/auth.schemas.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +62 -0
- package/dist/app.js.map +1 -0
- package/dist/config/config.schema.d.ts +65 -0
- package/dist/config/config.schema.d.ts.map +1 -0
- package/dist/config/config.schema.js +95 -0
- package/dist/config/config.schema.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +75 -0
- package/dist/config/index.js.map +1 -0
- package/dist/container.d.ts +47 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +137 -0
- package/dist/container.js.map +1 -0
- package/dist/data/database.d.ts +13 -0
- package/dist/data/database.d.ts.map +1 -0
- package/dist/data/database.js +68 -0
- package/dist/data/database.js.map +1 -0
- package/dist/data/jobs/token-cleanup.job.d.ts +23 -0
- package/dist/data/jobs/token-cleanup.job.d.ts.map +1 -0
- package/dist/data/jobs/token-cleanup.job.js +96 -0
- package/dist/data/jobs/token-cleanup.job.js.map +1 -0
- package/dist/data/migrations/migration.runner.d.ts +13 -0
- package/dist/data/migrations/migration.runner.d.ts.map +1 -0
- package/dist/data/migrations/migration.runner.js +136 -0
- package/dist/data/migrations/migration.runner.js.map +1 -0
- package/dist/data/models/Token.model.d.ts +30 -0
- package/dist/data/models/Token.model.d.ts.map +1 -0
- package/dist/data/models/Token.model.js +3 -0
- package/dist/data/models/Token.model.js.map +1 -0
- package/dist/data/repositories/token.repository.d.ts +16 -0
- package/dist/data/repositories/token.repository.d.ts.map +1 -0
- package/dist/data/repositories/token.repository.js +97 -0
- package/dist/data/repositories/token.repository.js.map +1 -0
- package/dist/providers/azure/auth.provider.d.ts +5 -0
- package/dist/providers/azure/auth.provider.d.ts.map +1 -0
- package/dist/providers/azure/auth.provider.js +13 -0
- package/dist/providers/azure/auth.provider.js.map +1 -0
- package/dist/providers/azure/azure-errors.d.ts +40 -0
- package/dist/providers/azure/azure-errors.d.ts.map +1 -0
- package/dist/providers/azure/azure-errors.js +121 -0
- package/dist/providers/azure/azure-errors.js.map +1 -0
- package/dist/providers/azure/azure-retry.d.ts +41 -0
- package/dist/providers/azure/azure-retry.d.ts.map +1 -0
- package/dist/providers/azure/azure-retry.js +85 -0
- package/dist/providers/azure/azure-retry.js.map +1 -0
- package/dist/providers/azure/graph-client.d.ts +26 -0
- package/dist/providers/azure/graph-client.d.ts.map +1 -0
- package/dist/providers/azure/graph-client.js +146 -0
- package/dist/providers/azure/graph-client.js.map +1 -0
- package/dist/providers/azure/graph.provider.d.ts +23 -0
- package/dist/providers/azure/graph.provider.d.ts.map +1 -0
- package/dist/providers/azure/graph.provider.js +161 -0
- package/dist/providers/azure/graph.provider.js.map +1 -0
- package/dist/providers/azure/queries/app.queries.d.ts +6 -0
- package/dist/providers/azure/queries/app.queries.d.ts.map +1 -0
- package/dist/providers/azure/queries/app.queries.js +9 -0
- package/dist/providers/azure/queries/app.queries.js.map +1 -0
- package/dist/providers/azure/queries/policy.queries.d.ts +6 -0
- package/dist/providers/azure/queries/policy.queries.d.ts.map +1 -0
- package/dist/providers/azure/queries/policy.queries.js +9 -0
- package/dist/providers/azure/queries/policy.queries.js.map +1 -0
- package/dist/providers/azure/queries/user.queries.d.ts +7 -0
- package/dist/providers/azure/queries/user.queries.d.ts.map +1 -0
- package/dist/providers/azure/queries/user.queries.js +10 -0
- package/dist/providers/azure/queries/user.queries.js.map +1 -0
- package/dist/providers/interfaces/IGraphProvider.d.ts +31 -0
- package/dist/providers/interfaces/IGraphProvider.d.ts.map +1 -0
- package/dist/providers/interfaces/IGraphProvider.js +3 -0
- package/dist/providers/interfaces/IGraphProvider.js.map +1 -0
- package/dist/providers/interfaces/ILDAPProvider.d.ts +37 -0
- package/dist/providers/interfaces/ILDAPProvider.d.ts.map +1 -0
- package/dist/providers/interfaces/ILDAPProvider.js +3 -0
- package/dist/providers/interfaces/ILDAPProvider.js.map +1 -0
- package/dist/providers/ldap/acl-parser.d.ts +8 -0
- package/dist/providers/ldap/acl-parser.d.ts.map +1 -0
- package/dist/providers/ldap/acl-parser.js +157 -0
- package/dist/providers/ldap/acl-parser.js.map +1 -0
- package/dist/providers/ldap/ad-mappers.d.ts +8 -0
- package/dist/providers/ldap/ad-mappers.d.ts.map +1 -0
- package/dist/providers/ldap/ad-mappers.js +162 -0
- package/dist/providers/ldap/ad-mappers.js.map +1 -0
- package/dist/providers/ldap/ldap-client.d.ts +33 -0
- package/dist/providers/ldap/ldap-client.d.ts.map +1 -0
- package/dist/providers/ldap/ldap-client.js +195 -0
- package/dist/providers/ldap/ldap-client.js.map +1 -0
- package/dist/providers/ldap/ldap-errors.d.ts +48 -0
- package/dist/providers/ldap/ldap-errors.d.ts.map +1 -0
- package/dist/providers/ldap/ldap-errors.js +120 -0
- package/dist/providers/ldap/ldap-errors.js.map +1 -0
- package/dist/providers/ldap/ldap-retry.d.ts +14 -0
- package/dist/providers/ldap/ldap-retry.d.ts.map +1 -0
- package/dist/providers/ldap/ldap-retry.js +102 -0
- package/dist/providers/ldap/ldap-retry.js.map +1 -0
- package/dist/providers/ldap/ldap-sanitizer.d.ts +12 -0
- package/dist/providers/ldap/ldap-sanitizer.d.ts.map +1 -0
- package/dist/providers/ldap/ldap-sanitizer.js +104 -0
- package/dist/providers/ldap/ldap-sanitizer.js.map +1 -0
- package/dist/providers/ldap/ldap.provider.d.ts +21 -0
- package/dist/providers/ldap/ldap.provider.d.ts.map +1 -0
- package/dist/providers/ldap/ldap.provider.js +165 -0
- package/dist/providers/ldap/ldap.provider.js.map +1 -0
- package/dist/providers/ldap/queries/computer.queries.d.ts +6 -0
- package/dist/providers/ldap/queries/computer.queries.d.ts.map +1 -0
- package/dist/providers/ldap/queries/computer.queries.js +9 -0
- package/dist/providers/ldap/queries/computer.queries.js.map +1 -0
- package/dist/providers/ldap/queries/group.queries.d.ts +6 -0
- package/dist/providers/ldap/queries/group.queries.d.ts.map +1 -0
- package/dist/providers/ldap/queries/group.queries.js +9 -0
- package/dist/providers/ldap/queries/group.queries.js.map +1 -0
- package/dist/providers/ldap/queries/user.queries.d.ts +7 -0
- package/dist/providers/ldap/queries/user.queries.d.ts.map +1 -0
- package/dist/providers/ldap/queries/user.queries.js +10 -0
- package/dist/providers/ldap/queries/user.queries.js.map +1 -0
- package/dist/providers/smb/smb.provider.d.ts +68 -0
- package/dist/providers/smb/smb.provider.d.ts.map +1 -0
- package/dist/providers/smb/smb.provider.js +382 -0
- package/dist/providers/smb/smb.provider.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +44 -0
- package/dist/server.js.map +1 -0
- package/dist/services/audit/ad-audit.service.d.ts +70 -0
- package/dist/services/audit/ad-audit.service.d.ts.map +1 -0
- package/dist/services/audit/ad-audit.service.js +1019 -0
- package/dist/services/audit/ad-audit.service.js.map +1 -0
- package/dist/services/audit/attack-graph.service.d.ts +62 -0
- package/dist/services/audit/attack-graph.service.d.ts.map +1 -0
- package/dist/services/audit/attack-graph.service.js +702 -0
- package/dist/services/audit/attack-graph.service.js.map +1 -0
- package/dist/services/audit/audit.service.d.ts +4 -0
- package/dist/services/audit/audit.service.d.ts.map +1 -0
- package/dist/services/audit/audit.service.js +10 -0
- package/dist/services/audit/audit.service.js.map +1 -0
- package/dist/services/audit/azure-audit.service.d.ts +37 -0
- package/dist/services/audit/azure-audit.service.d.ts.map +1 -0
- package/dist/services/audit/azure-audit.service.js +153 -0
- package/dist/services/audit/azure-audit.service.js.map +1 -0
- package/dist/services/audit/detectors/ad/accounts.detector.d.ts +37 -0
- package/dist/services/audit/detectors/ad/accounts.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/accounts.detector.js +881 -0
- package/dist/services/audit/detectors/ad/accounts.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/adcs.detector.d.ts +21 -0
- package/dist/services/audit/detectors/ad/adcs.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/adcs.detector.js +227 -0
- package/dist/services/audit/detectors/ad/adcs.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/advanced.detector.d.ts +63 -0
- package/dist/services/audit/detectors/ad/advanced.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/advanced.detector.js +867 -0
- package/dist/services/audit/detectors/ad/advanced.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/attack-paths.detector.d.ts +16 -0
- package/dist/services/audit/detectors/ad/attack-paths.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/attack-paths.detector.js +369 -0
- package/dist/services/audit/detectors/ad/attack-paths.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/compliance.detector.d.ts +28 -0
- package/dist/services/audit/detectors/ad/compliance.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/compliance.detector.js +896 -0
- package/dist/services/audit/detectors/ad/compliance.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/computers.detector.d.ts +30 -0
- package/dist/services/audit/detectors/ad/computers.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/computers.detector.js +799 -0
- package/dist/services/audit/detectors/ad/computers.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/gpo.detector.d.ts +17 -0
- package/dist/services/audit/detectors/ad/gpo.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/gpo.detector.js +257 -0
- package/dist/services/audit/detectors/ad/gpo.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/groups.detector.d.ts +19 -0
- package/dist/services/audit/detectors/ad/groups.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/groups.detector.js +488 -0
- package/dist/services/audit/detectors/ad/groups.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/index.d.ts +15 -0
- package/dist/services/audit/detectors/ad/index.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/index.js +51 -0
- package/dist/services/audit/detectors/ad/index.js.map +1 -0
- package/dist/services/audit/detectors/ad/kerberos.detector.d.ts +17 -0
- package/dist/services/audit/detectors/ad/kerberos.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/kerberos.detector.js +293 -0
- package/dist/services/audit/detectors/ad/kerberos.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/monitoring.detector.d.ts +23 -0
- package/dist/services/audit/detectors/ad/monitoring.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/monitoring.detector.js +328 -0
- package/dist/services/audit/detectors/ad/monitoring.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/network.detector.d.ts +39 -0
- package/dist/services/audit/detectors/ad/network.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/network.detector.js +257 -0
- package/dist/services/audit/detectors/ad/network.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/password.detector.d.ts +14 -0
- package/dist/services/audit/detectors/ad/password.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/password.detector.js +235 -0
- package/dist/services/audit/detectors/ad/password.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/permissions.detector.d.ts +20 -0
- package/dist/services/audit/detectors/ad/permissions.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/permissions.detector.js +392 -0
- package/dist/services/audit/detectors/ad/permissions.detector.js.map +1 -0
- package/dist/services/audit/detectors/ad/trusts.detector.d.ts +11 -0
- package/dist/services/audit/detectors/ad/trusts.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/ad/trusts.detector.js +186 -0
- package/dist/services/audit/detectors/ad/trusts.detector.js.map +1 -0
- package/dist/services/audit/detectors/azure/app-security.detector.d.ts +11 -0
- package/dist/services/audit/detectors/azure/app-security.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/azure/app-security.detector.js +184 -0
- package/dist/services/audit/detectors/azure/app-security.detector.js.map +1 -0
- package/dist/services/audit/detectors/azure/conditional-access.detector.d.ts +10 -0
- package/dist/services/audit/detectors/azure/conditional-access.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/azure/conditional-access.detector.js +130 -0
- package/dist/services/audit/detectors/azure/conditional-access.detector.js.map +1 -0
- package/dist/services/audit/detectors/azure/privilege-security.detector.d.ts +8 -0
- package/dist/services/audit/detectors/azure/privilege-security.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/azure/privilege-security.detector.js +113 -0
- package/dist/services/audit/detectors/azure/privilege-security.detector.js.map +1 -0
- package/dist/services/audit/detectors/azure/user-security.detector.d.ts +14 -0
- package/dist/services/audit/detectors/azure/user-security.detector.d.ts.map +1 -0
- package/dist/services/audit/detectors/azure/user-security.detector.js +198 -0
- package/dist/services/audit/detectors/azure/user-security.detector.js.map +1 -0
- package/dist/services/audit/detectors/index.d.ts +2 -0
- package/dist/services/audit/detectors/index.d.ts.map +1 -0
- package/dist/services/audit/detectors/index.js +38 -0
- package/dist/services/audit/detectors/index.js.map +1 -0
- package/dist/services/audit/response-formatter.d.ts +176 -0
- package/dist/services/audit/response-formatter.d.ts.map +1 -0
- package/dist/services/audit/response-formatter.js +240 -0
- package/dist/services/audit/response-formatter.js.map +1 -0
- package/dist/services/audit/scoring.service.d.ts +15 -0
- package/dist/services/audit/scoring.service.d.ts.map +1 -0
- package/dist/services/audit/scoring.service.js +139 -0
- package/dist/services/audit/scoring.service.js.map +1 -0
- package/dist/services/auth/crypto.service.d.ts +19 -0
- package/dist/services/auth/crypto.service.d.ts.map +1 -0
- package/dist/services/auth/crypto.service.js +135 -0
- package/dist/services/auth/crypto.service.js.map +1 -0
- package/dist/services/auth/errors.d.ts +19 -0
- package/dist/services/auth/errors.d.ts.map +1 -0
- package/dist/services/auth/errors.js +46 -0
- package/dist/services/auth/errors.js.map +1 -0
- package/dist/services/auth/token.service.d.ts +41 -0
- package/dist/services/auth/token.service.d.ts.map +1 -0
- package/dist/services/auth/token.service.js +208 -0
- package/dist/services/auth/token.service.js.map +1 -0
- package/dist/services/config/config.service.d.ts +6 -0
- package/dist/services/config/config.service.d.ts.map +1 -0
- package/dist/services/config/config.service.js +64 -0
- package/dist/services/config/config.service.js.map +1 -0
- package/dist/services/export/export.service.d.ts +28 -0
- package/dist/services/export/export.service.d.ts.map +1 -0
- package/dist/services/export/export.service.js +28 -0
- package/dist/services/export/export.service.js.map +1 -0
- package/dist/services/export/formatters/csv.formatter.d.ts +8 -0
- package/dist/services/export/formatters/csv.formatter.d.ts.map +1 -0
- package/dist/services/export/formatters/csv.formatter.js +46 -0
- package/dist/services/export/formatters/csv.formatter.js.map +1 -0
- package/dist/services/export/formatters/json.formatter.d.ts +40 -0
- package/dist/services/export/formatters/json.formatter.d.ts.map +1 -0
- package/dist/services/export/formatters/json.formatter.js +58 -0
- package/dist/services/export/formatters/json.formatter.js.map +1 -0
- package/dist/services/jobs/azure-job-runner.d.ts +38 -0
- package/dist/services/jobs/azure-job-runner.d.ts.map +1 -0
- package/dist/services/jobs/azure-job-runner.js +199 -0
- package/dist/services/jobs/azure-job-runner.js.map +1 -0
- package/dist/services/jobs/index.d.ts +4 -0
- package/dist/services/jobs/index.d.ts.map +1 -0
- package/dist/services/jobs/index.js +20 -0
- package/dist/services/jobs/index.js.map +1 -0
- package/dist/services/jobs/job-runner.d.ts +64 -0
- package/dist/services/jobs/job-runner.d.ts.map +1 -0
- package/dist/services/jobs/job-runner.js +952 -0
- package/dist/services/jobs/job-runner.js.map +1 -0
- package/dist/services/jobs/job-store.d.ts +27 -0
- package/dist/services/jobs/job-store.d.ts.map +1 -0
- package/dist/services/jobs/job-store.js +261 -0
- package/dist/services/jobs/job-store.js.map +1 -0
- package/dist/services/jobs/job.types.d.ts +67 -0
- package/dist/services/jobs/job.types.d.ts.map +1 -0
- package/dist/services/jobs/job.types.js +36 -0
- package/dist/services/jobs/job.types.js.map +1 -0
- package/dist/types/ad.types.d.ts +74 -0
- package/dist/types/ad.types.d.ts.map +1 -0
- package/dist/types/ad.types.js +3 -0
- package/dist/types/ad.types.js.map +1 -0
- package/dist/types/adcs.types.d.ts +58 -0
- package/dist/types/adcs.types.d.ts.map +1 -0
- package/dist/types/adcs.types.js +38 -0
- package/dist/types/adcs.types.js.map +1 -0
- package/dist/types/attack-graph.types.d.ts +135 -0
- package/dist/types/attack-graph.types.d.ts.map +1 -0
- package/dist/types/attack-graph.types.js +58 -0
- package/dist/types/attack-graph.types.js.map +1 -0
- package/dist/types/audit.types.d.ts +34 -0
- package/dist/types/audit.types.d.ts.map +1 -0
- package/dist/types/audit.types.js +3 -0
- package/dist/types/audit.types.js.map +1 -0
- package/dist/types/azure.types.d.ts +61 -0
- package/dist/types/azure.types.d.ts.map +1 -0
- package/dist/types/azure.types.js +3 -0
- package/dist/types/azure.types.js.map +1 -0
- package/dist/types/config.types.d.ts +63 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +3 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/error.types.d.ts +33 -0
- package/dist/types/error.types.d.ts.map +1 -0
- package/dist/types/error.types.js +70 -0
- package/dist/types/error.types.js.map +1 -0
- package/dist/types/finding.types.d.ts +133 -0
- package/dist/types/finding.types.d.ts.map +1 -0
- package/dist/types/finding.types.js +3 -0
- package/dist/types/finding.types.js.map +1 -0
- package/dist/types/gpo.types.d.ts +39 -0
- package/dist/types/gpo.types.d.ts.map +1 -0
- package/dist/types/gpo.types.js +15 -0
- package/dist/types/gpo.types.js.map +1 -0
- package/dist/types/token.types.d.ts +26 -0
- package/dist/types/token.types.d.ts.map +1 -0
- package/dist/types/token.types.js +3 -0
- package/dist/types/token.types.js.map +1 -0
- package/dist/types/trust.types.d.ts +45 -0
- package/dist/types/trust.types.d.ts.map +1 -0
- package/dist/types/trust.types.js +71 -0
- package/dist/types/trust.types.js.map +1 -0
- package/dist/utils/entity-converter.d.ts +17 -0
- package/dist/utils/entity-converter.d.ts.map +1 -0
- package/dist/utils/entity-converter.js +285 -0
- package/dist/utils/entity-converter.js.map +1 -0
- package/dist/utils/graph.util.d.ts +66 -0
- package/dist/utils/graph.util.d.ts.map +1 -0
- package/dist/utils/graph.util.js +382 -0
- package/dist/utils/graph.util.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +86 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/type-name-normalizer.d.ts +5 -0
- package/dist/utils/type-name-normalizer.d.ts.map +1 -0
- package/dist/utils/type-name-normalizer.js +218 -0
- package/dist/utils/type-name-normalizer.js.map +1 -0
- package/docker-compose.yml +26 -0
- package/docs/api/README.md +178 -0
- package/docs/api/openapi.yaml +1524 -0
- package/eslint.config.js +54 -0
- package/jest.config.js +38 -0
- package/package.json +97 -0
- package/scripts/fetch-ad-cert.sh +142 -0
- package/src/.gitkeep +0 -0
- package/src/api/.gitkeep +0 -0
- package/src/api/controllers/.gitkeep +0 -0
- package/src/api/controllers/audit.controller.ts +313 -0
- package/src/api/controllers/auth.controller.ts +258 -0
- package/src/api/controllers/export.controller.ts +153 -0
- package/src/api/controllers/health.controller.ts +16 -0
- package/src/api/controllers/jobs.controller.ts +187 -0
- package/src/api/controllers/providers.controller.ts +165 -0
- package/src/api/dto/.gitkeep +0 -0
- package/src/api/dto/AuditRequest.dto.ts +8 -0
- package/src/api/dto/AuditResponse.dto.ts +19 -0
- package/src/api/dto/TokenRequest.dto.ts +8 -0
- package/src/api/dto/TokenResponse.dto.ts +14 -0
- package/src/api/middlewares/.gitkeep +0 -0
- package/src/api/middlewares/authenticate.ts +203 -0
- package/src/api/middlewares/errorHandler.ts +54 -0
- package/src/api/middlewares/rateLimit.ts +35 -0
- package/src/api/middlewares/validate.ts +32 -0
- package/src/api/routes/.gitkeep +0 -0
- package/src/api/routes/audit.routes.ts +77 -0
- package/src/api/routes/auth.routes.ts +71 -0
- package/src/api/routes/export.routes.ts +34 -0
- package/src/api/routes/health.routes.ts +14 -0
- package/src/api/routes/index.ts +40 -0
- package/src/api/routes/providers.routes.ts +24 -0
- package/src/api/validators/.gitkeep +0 -0
- package/src/api/validators/audit.schemas.ts +59 -0
- package/src/api/validators/auth.schemas.ts +59 -0
- package/src/app.ts +87 -0
- package/src/config/.gitkeep +0 -0
- package/src/config/config.schema.ts +108 -0
- package/src/config/index.ts +82 -0
- package/src/container.ts +221 -0
- package/src/data/.gitkeep +0 -0
- package/src/data/database.ts +78 -0
- package/src/data/jobs/token-cleanup.job.ts +166 -0
- package/src/data/migrations/.gitkeep +0 -0
- package/src/data/migrations/001_initial_schema.sql +47 -0
- package/src/data/migrations/migration.runner.ts +125 -0
- package/src/data/models/.gitkeep +0 -0
- package/src/data/models/Token.model.ts +35 -0
- package/src/data/repositories/.gitkeep +0 -0
- package/src/data/repositories/token.repository.ts +160 -0
- package/src/providers/.gitkeep +0 -0
- package/src/providers/azure/.gitkeep +0 -0
- package/src/providers/azure/auth.provider.ts +14 -0
- package/src/providers/azure/azure-errors.ts +189 -0
- package/src/providers/azure/azure-retry.ts +168 -0
- package/src/providers/azure/graph-client.ts +315 -0
- package/src/providers/azure/graph.provider.ts +294 -0
- package/src/providers/azure/queries/app.queries.ts +9 -0
- package/src/providers/azure/queries/policy.queries.ts +9 -0
- package/src/providers/azure/queries/user.queries.ts +10 -0
- package/src/providers/interfaces/.gitkeep +0 -0
- package/src/providers/interfaces/IGraphProvider.ts +117 -0
- package/src/providers/interfaces/ILDAPProvider.ts +142 -0
- package/src/providers/ldap/.gitkeep +0 -0
- package/src/providers/ldap/acl-parser.ts +231 -0
- package/src/providers/ldap/ad-mappers.ts +280 -0
- package/src/providers/ldap/ldap-client.ts +259 -0
- package/src/providers/ldap/ldap-errors.ts +188 -0
- package/src/providers/ldap/ldap-retry.ts +267 -0
- package/src/providers/ldap/ldap-sanitizer.ts +273 -0
- package/src/providers/ldap/ldap.provider.ts +293 -0
- package/src/providers/ldap/queries/computer.queries.ts +9 -0
- package/src/providers/ldap/queries/group.queries.ts +9 -0
- package/src/providers/ldap/queries/user.queries.ts +10 -0
- package/src/providers/smb/smb.provider.ts +653 -0
- package/src/server.ts +60 -0
- package/src/services/.gitkeep +0 -0
- package/src/services/audit/.gitkeep +0 -0
- package/src/services/audit/ad-audit.service.ts +1481 -0
- package/src/services/audit/attack-graph.service.ts +1104 -0
- package/src/services/audit/audit.service.ts +12 -0
- package/src/services/audit/azure-audit.service.ts +286 -0
- package/src/services/audit/detectors/ad/accounts.detector.ts +1232 -0
- package/src/services/audit/detectors/ad/adcs.detector.ts +449 -0
- package/src/services/audit/detectors/ad/advanced.detector.ts +1270 -0
- package/src/services/audit/detectors/ad/attack-paths.detector.ts +600 -0
- package/src/services/audit/detectors/ad/compliance.detector.ts +1421 -0
- package/src/services/audit/detectors/ad/computers.detector.ts +1188 -0
- package/src/services/audit/detectors/ad/gpo.detector.ts +485 -0
- package/src/services/audit/detectors/ad/groups.detector.ts +685 -0
- package/src/services/audit/detectors/ad/index.ts +84 -0
- package/src/services/audit/detectors/ad/kerberos.detector.ts +424 -0
- package/src/services/audit/detectors/ad/monitoring.detector.ts +501 -0
- package/src/services/audit/detectors/ad/network.detector.ts +538 -0
- package/src/services/audit/detectors/ad/password.detector.ts +324 -0
- package/src/services/audit/detectors/ad/permissions.detector.ts +637 -0
- package/src/services/audit/detectors/ad/trusts.detector.ts +315 -0
- package/src/services/audit/detectors/azure/app-security.detector.ts +246 -0
- package/src/services/audit/detectors/azure/conditional-access.detector.ts +186 -0
- package/src/services/audit/detectors/azure/privilege-security.detector.ts +176 -0
- package/src/services/audit/detectors/azure/user-security.detector.ts +280 -0
- package/src/services/audit/detectors/index.ts +18 -0
- package/src/services/audit/response-formatter.ts +604 -0
- package/src/services/audit/scoring.service.ts +234 -0
- package/src/services/auth/.gitkeep +0 -0
- package/src/services/auth/crypto.service.ts +230 -0
- package/src/services/auth/errors.ts +47 -0
- package/src/services/auth/token.service.ts +420 -0
- package/src/services/config/.gitkeep +0 -0
- package/src/services/config/config.service.ts +75 -0
- package/src/services/export/.gitkeep +0 -0
- package/src/services/export/export.service.ts +99 -0
- package/src/services/export/formatters/csv.formatter.ts +124 -0
- package/src/services/export/formatters/json.formatter.ts +160 -0
- package/src/services/jobs/azure-job-runner.ts +312 -0
- package/src/services/jobs/index.ts +9 -0
- package/src/services/jobs/job-runner.ts +1280 -0
- package/src/services/jobs/job-store.ts +384 -0
- package/src/services/jobs/job.types.ts +182 -0
- package/src/types/.gitkeep +0 -0
- package/src/types/ad.types.ts +91 -0
- package/src/types/adcs.types.ts +107 -0
- package/src/types/attack-graph.types.ts +260 -0
- package/src/types/audit.types.ts +42 -0
- package/src/types/azure.types.ts +68 -0
- package/src/types/config.types.ts +79 -0
- package/src/types/error.types.ts +69 -0
- package/src/types/finding.types.ts +284 -0
- package/src/types/gpo.types.ts +72 -0
- package/src/types/smb2.d.ts +73 -0
- package/src/types/token.types.ts +32 -0
- package/src/types/trust.types.ts +140 -0
- package/src/utils/.gitkeep +0 -0
- package/src/utils/entity-converter.ts +453 -0
- package/src/utils/graph.util.ts +609 -0
- package/src/utils/logger.ts +111 -0
- package/src/utils/type-name-normalizer.ts +302 -0
- package/tests/.gitkeep +0 -0
- package/tests/e2e/.gitkeep +0 -0
- package/tests/fixtures/.gitkeep +0 -0
- package/tests/integration/.gitkeep +0 -0
- package/tests/integration/README.md +156 -0
- package/tests/integration/ad-audit.integration.test.ts +216 -0
- package/tests/integration/api/.gitkeep +0 -0
- package/tests/integration/api/endpoints.integration.test.ts +431 -0
- package/tests/integration/auth/jwt-authentication.integration.test.ts +358 -0
- package/tests/integration/providers/.gitkeep +0 -0
- package/tests/integration/providers/azure-basic.integration.test.ts +167 -0
- package/tests/integration/providers/ldap-basic.integration.test.ts +152 -0
- package/tests/integration/providers/ldap-connectivity.test.ts +44 -0
- package/tests/integration/providers/ldap-provider.integration.test.ts +347 -0
- package/tests/mocks/.gitkeep +0 -0
- package/tests/setup.ts +16 -0
- package/tests/unit/.gitkeep +0 -0
- package/tests/unit/api/middlewares/authenticate.test.ts +446 -0
- package/tests/unit/providers/.gitkeep +0 -0
- package/tests/unit/providers/azure/azure-errors.test.ts +193 -0
- package/tests/unit/providers/azure/azure-retry.test.ts +254 -0
- package/tests/unit/providers/azure/graph-provider.test.ts +313 -0
- package/tests/unit/providers/ldap/ad-mappers.test.ts +392 -0
- package/tests/unit/providers/ldap/ldap-provider.test.ts +376 -0
- package/tests/unit/providers/ldap/ldap-retry.test.ts +377 -0
- package/tests/unit/providers/ldap/ldap-sanitizer.test.ts +301 -0
- package/tests/unit/sample.test.ts +19 -0
- package/tests/unit/services/.gitkeep +0 -0
- package/tests/unit/services/audit/detectors/ad/accounts.detector.test.ts +393 -0
- package/tests/unit/services/audit/detectors/ad/advanced.detector.test.ts +380 -0
- package/tests/unit/services/audit/detectors/ad/computers.detector.test.ts +440 -0
- package/tests/unit/services/audit/detectors/ad/groups.detector.test.ts +276 -0
- package/tests/unit/services/audit/detectors/ad/kerberos.detector.test.ts +215 -0
- package/tests/unit/services/audit/detectors/ad/password.detector.test.ts +226 -0
- package/tests/unit/services/audit/detectors/ad/permissions.detector.test.ts +244 -0
- package/tests/unit/services/audit/detectors/azure/app-security.detector.test.ts +349 -0
- package/tests/unit/services/audit/detectors/azure/conditional-access.detector.test.ts +374 -0
- package/tests/unit/services/audit/detectors/azure/privilege-security.detector.test.ts +374 -0
- package/tests/unit/services/audit/detectors/azure/user-security.detector.test.ts +297 -0
- package/tests/unit/services/auth/crypto.service.test.ts +296 -0
- package/tests/unit/services/auth/token.service.test.ts +579 -0
- package/tests/unit/services/export/export.service.test.ts +241 -0
- package/tests/unit/services/export/formatters/csv.formatter.test.ts +270 -0
- package/tests/unit/services/export/formatters/json.formatter.test.ts +258 -0
- package/tests/unit/utils/.gitkeep +0 -0
- package/tsconfig.json +50 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADCS (AD Certificate Services) Types
|
|
3
|
+
*
|
|
4
|
+
* Types for certificate templates and CAs used in ESC1-ESC11 vulnerability detection.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* ADCS Certificate Template
|
|
9
|
+
*/
|
|
10
|
+
export interface ADCSCertificateTemplate {
|
|
11
|
+
dn: string;
|
|
12
|
+
name: string;
|
|
13
|
+
displayName?: string;
|
|
14
|
+
|
|
15
|
+
// Template OID
|
|
16
|
+
'msPKI-Cert-Template-OID'?: string;
|
|
17
|
+
|
|
18
|
+
// Flags
|
|
19
|
+
'msPKI-Certificate-Name-Flag'?: number;
|
|
20
|
+
'msPKI-Enrollment-Flag'?: number;
|
|
21
|
+
'msPKI-Private-Key-Flag'?: number;
|
|
22
|
+
'msPKI-RA-Signature'?: number;
|
|
23
|
+
|
|
24
|
+
// Schema version (1 = legacy, 2+ = newer with security extension support)
|
|
25
|
+
'msPKI-Template-Schema-Version'?: number;
|
|
26
|
+
|
|
27
|
+
// Extended Key Usage OIDs
|
|
28
|
+
pKIExtendedKeyUsage?: string[];
|
|
29
|
+
|
|
30
|
+
// Security descriptor for ACL analysis
|
|
31
|
+
nTSecurityDescriptor?: Buffer;
|
|
32
|
+
|
|
33
|
+
// cn field (used for matching)
|
|
34
|
+
cn?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* ADCS Certificate Authority
|
|
39
|
+
*/
|
|
40
|
+
export interface ADCSCertificateAuthority {
|
|
41
|
+
dn: string;
|
|
42
|
+
name: string;
|
|
43
|
+
dNSHostName: string;
|
|
44
|
+
|
|
45
|
+
// CA configuration
|
|
46
|
+
certificateTemplates?: string[];
|
|
47
|
+
cACertificate?: Buffer;
|
|
48
|
+
|
|
49
|
+
// Security descriptor
|
|
50
|
+
nTSecurityDescriptor?: Buffer;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Certificate Name Flags (msPKI-Certificate-Name-Flag)
|
|
54
|
+
export const CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT = 0x00000001;
|
|
55
|
+
export const CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT_ALT_NAME = 0x00010000;
|
|
56
|
+
export const CT_FLAG_SUBJECT_REQUIRE_DIRECTORY_PATH = 0x80000000;
|
|
57
|
+
export const CT_FLAG_SUBJECT_REQUIRE_COMMON_NAME = 0x40000000;
|
|
58
|
+
export const CT_FLAG_SUBJECT_REQUIRE_EMAIL = 0x20000000;
|
|
59
|
+
export const CT_FLAG_SUBJECT_REQUIRE_DNS_AS_CN = 0x10000000;
|
|
60
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_UPN = 0x02000000;
|
|
61
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_EMAIL = 0x04000000;
|
|
62
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_SPN = 0x00800000;
|
|
63
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_DIRECTORY_GUID = 0x01000000;
|
|
64
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_DNS = 0x08000000;
|
|
65
|
+
export const CT_FLAG_SUBJECT_ALT_REQUIRE_DOMAIN_DNS = 0x00400000;
|
|
66
|
+
|
|
67
|
+
// Enrollment Flags (msPKI-Enrollment-Flag)
|
|
68
|
+
export const CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS = 0x00000001;
|
|
69
|
+
export const CT_FLAG_PEND_ALL_REQUESTS = 0x00000002; // Manager approval required
|
|
70
|
+
export const CT_FLAG_PUBLISH_TO_KRA_CONTAINER = 0x00000004;
|
|
71
|
+
export const CT_FLAG_PUBLISH_TO_DS = 0x00000008;
|
|
72
|
+
export const CT_FLAG_AUTO_ENROLLMENT_CHECK_USER_DS_CERTIFICATE = 0x00000010;
|
|
73
|
+
export const CT_FLAG_AUTO_ENROLLMENT = 0x00000020;
|
|
74
|
+
export const CT_FLAG_PREVIOUS_APPROVAL_VALIDATE_REENROLLMENT = 0x00000040;
|
|
75
|
+
export const CT_FLAG_USER_INTERACTION_REQUIRED = 0x00000100;
|
|
76
|
+
export const CT_FLAG_REMOVE_INVALID_CERTIFICATE_FROM_PERSONAL_STORE = 0x00000400;
|
|
77
|
+
export const CT_FLAG_ALLOW_ENROLL_ON_BEHALF_OF = 0x00000800;
|
|
78
|
+
export const CT_FLAG_ADD_OCSP_NOCHECK = 0x00001000;
|
|
79
|
+
export const CT_FLAG_ENABLE_KEY_REUSE_ON_NT_TOKEN_KEYSET_STORAGE_FULL = 0x00002000;
|
|
80
|
+
export const CT_FLAG_NOREVOCATIONINFOINISSUEDCERTS = 0x00004000;
|
|
81
|
+
export const CT_FLAG_INCLUDE_BASIC_CONSTRAINTS_FOR_EE_CERTS = 0x00008000;
|
|
82
|
+
export const CT_FLAG_ALLOW_PREVIOUS_APPROVAL_KEYBASEDRENEWAL_VALIDATE_REENROLLMENT = 0x00010000;
|
|
83
|
+
export const CT_FLAG_ISSUANCE_POLICIES_FROM_REQUEST = 0x00020000;
|
|
84
|
+
|
|
85
|
+
// Common Extended Key Usage OIDs
|
|
86
|
+
export const EKU_CLIENT_AUTH = '1.3.6.1.5.5.7.3.2';
|
|
87
|
+
export const EKU_PKIINIT_CLIENT_AUTH = '1.3.6.1.5.2.3.4';
|
|
88
|
+
export const EKU_SMART_CARD_LOGON = '1.3.6.1.4.1.311.20.2.2';
|
|
89
|
+
export const EKU_ANY_PURPOSE = '2.5.29.37.0';
|
|
90
|
+
export const EKU_CERTIFICATE_REQUEST_AGENT = '1.3.6.1.4.1.311.20.2.1'; // Enrollment Agent
|
|
91
|
+
export const EKU_SERVER_AUTH = '1.3.6.1.5.5.7.3.1';
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* ESC vulnerability type enum
|
|
95
|
+
*/
|
|
96
|
+
export type ESCVulnerabilityType =
|
|
97
|
+
| 'ESC1'
|
|
98
|
+
| 'ESC2'
|
|
99
|
+
| 'ESC3'
|
|
100
|
+
| 'ESC4'
|
|
101
|
+
| 'ESC5'
|
|
102
|
+
| 'ESC6'
|
|
103
|
+
| 'ESC7'
|
|
104
|
+
| 'ESC8'
|
|
105
|
+
| 'ESC9'
|
|
106
|
+
| 'ESC10'
|
|
107
|
+
| 'ESC11';
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attack Graph Export Types
|
|
3
|
+
*
|
|
4
|
+
* Types for exporting attack path data in a format suitable
|
|
5
|
+
* for visualization tools like BloodHound or custom graph UIs.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Node types in the attack graph
|
|
10
|
+
*/
|
|
11
|
+
export type AttackNodeType = 'user' | 'group' | 'computer' | 'gpo' | 'ou' | 'domain';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Risk levels for attack paths
|
|
15
|
+
*/
|
|
16
|
+
export type AttackPathRisk = 'critical' | 'high' | 'medium' | 'low';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Types of attack paths
|
|
20
|
+
*/
|
|
21
|
+
export type AttackPathType =
|
|
22
|
+
| 'ACL_ABUSE'
|
|
23
|
+
| 'KERBEROASTING'
|
|
24
|
+
| 'ASREP_ROASTING'
|
|
25
|
+
| 'DELEGATION_ABUSE'
|
|
26
|
+
| 'LATERAL_MOVEMENT'
|
|
27
|
+
| 'CERTIFICATE_ABUSE'
|
|
28
|
+
| 'GROUP_MEMBERSHIP'
|
|
29
|
+
| 'DCSYNC'
|
|
30
|
+
| 'OWNERSHIP_ABUSE';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Relation types between nodes
|
|
34
|
+
*/
|
|
35
|
+
export type AttackRelationType =
|
|
36
|
+
| 'MemberOf'
|
|
37
|
+
| 'GenericAll'
|
|
38
|
+
| 'WriteDacl'
|
|
39
|
+
| 'WriteOwner'
|
|
40
|
+
| 'GenericWrite'
|
|
41
|
+
| 'ForceChangePassword'
|
|
42
|
+
| 'AddMember'
|
|
43
|
+
| 'DCSync'
|
|
44
|
+
| 'AllowedToDelegate'
|
|
45
|
+
| 'AllowedToAct'
|
|
46
|
+
| 'HasSPN'
|
|
47
|
+
| 'NoPreauth'
|
|
48
|
+
| 'Owns'
|
|
49
|
+
| 'AdminTo'
|
|
50
|
+
| 'HasSession'
|
|
51
|
+
| 'CanPSRemote'
|
|
52
|
+
| 'CanRDP'
|
|
53
|
+
| 'ExecuteDCOM'
|
|
54
|
+
| 'SQLAdmin'
|
|
55
|
+
| 'ReadLAPSPassword'
|
|
56
|
+
| 'ReadGMSAPassword'
|
|
57
|
+
| 'Contains'
|
|
58
|
+
| 'GPLink'
|
|
59
|
+
| 'TrustedBy';
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A node in the attack graph
|
|
63
|
+
*/
|
|
64
|
+
export interface AttackGraphNode {
|
|
65
|
+
id: string; // SID or unique identifier
|
|
66
|
+
name: string; // sAMAccountName or displayName
|
|
67
|
+
type: AttackNodeType;
|
|
68
|
+
sid?: string;
|
|
69
|
+
dn?: string;
|
|
70
|
+
domain?: string;
|
|
71
|
+
isEnabled?: boolean;
|
|
72
|
+
isPrivileged?: boolean;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A relation in the attack chain
|
|
77
|
+
*/
|
|
78
|
+
export interface AttackGraphRelation {
|
|
79
|
+
relation: AttackRelationType;
|
|
80
|
+
isAbusable: boolean;
|
|
81
|
+
accessMask?: number;
|
|
82
|
+
objectType?: string;
|
|
83
|
+
description?: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Chain element - either a node or a relation
|
|
88
|
+
*/
|
|
89
|
+
export type AttackChainElement = AttackGraphNode | AttackGraphRelation;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Entry point properties for an attack path
|
|
93
|
+
*/
|
|
94
|
+
export interface AttackEntryPointProperties {
|
|
95
|
+
hasSPN?: boolean;
|
|
96
|
+
noPreauth?: boolean;
|
|
97
|
+
passwordNotExpire?: boolean;
|
|
98
|
+
unconstrained?: boolean;
|
|
99
|
+
constrained?: boolean;
|
|
100
|
+
rbcd?: boolean;
|
|
101
|
+
adminCount?: boolean;
|
|
102
|
+
enabled?: boolean;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Entry point for an attack path
|
|
107
|
+
*/
|
|
108
|
+
export interface AttackEntryPoint {
|
|
109
|
+
id: string;
|
|
110
|
+
name: string;
|
|
111
|
+
type: AttackNodeType;
|
|
112
|
+
properties: AttackEntryPointProperties;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* A complete attack path
|
|
117
|
+
*/
|
|
118
|
+
export interface AttackPath {
|
|
119
|
+
id: string; // path-001, path-002, etc.
|
|
120
|
+
risk: AttackPathRisk;
|
|
121
|
+
type: AttackPathType;
|
|
122
|
+
hops: number;
|
|
123
|
+
description: string;
|
|
124
|
+
chain: AttackChainElement[];
|
|
125
|
+
entryPoint: AttackEntryPoint;
|
|
126
|
+
target: AttackGraphNode;
|
|
127
|
+
mitigation: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Target information
|
|
132
|
+
*/
|
|
133
|
+
export interface AttackTarget {
|
|
134
|
+
id: string;
|
|
135
|
+
name: string;
|
|
136
|
+
type: AttackNodeType;
|
|
137
|
+
sid?: string;
|
|
138
|
+
dn?: string;
|
|
139
|
+
reason: string; // Why this is a target (e.g., "Domain Admins", "adminCount=1")
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Statistics for the attack graph
|
|
144
|
+
*/
|
|
145
|
+
export interface AttackGraphStats {
|
|
146
|
+
totalPaths: number;
|
|
147
|
+
byRisk: {
|
|
148
|
+
critical: number;
|
|
149
|
+
high: number;
|
|
150
|
+
medium: number;
|
|
151
|
+
low: number;
|
|
152
|
+
};
|
|
153
|
+
byType: Record<AttackPathType, number>;
|
|
154
|
+
averageHops: number;
|
|
155
|
+
shortestPath: number;
|
|
156
|
+
longestPath: number;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Unique node with path count
|
|
161
|
+
*/
|
|
162
|
+
export interface AttackGraphUniqueNode {
|
|
163
|
+
id: string;
|
|
164
|
+
name: string;
|
|
165
|
+
type: AttackNodeType;
|
|
166
|
+
pathCount: number; // Number of paths this node appears in
|
|
167
|
+
sid?: string;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Complete attack graph export format
|
|
172
|
+
*/
|
|
173
|
+
export interface AttackGraphExport {
|
|
174
|
+
version: string;
|
|
175
|
+
generatedAt: string; // ISO 8601 timestamp
|
|
176
|
+
domain: string;
|
|
177
|
+
targets: AttackTarget[];
|
|
178
|
+
paths: AttackPath[];
|
|
179
|
+
stats: AttackGraphStats;
|
|
180
|
+
uniqueNodes: AttackGraphUniqueNode[];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* ACL GUIDs for specific rights
|
|
185
|
+
*/
|
|
186
|
+
export const ACL_GUIDS = {
|
|
187
|
+
// Extended rights
|
|
188
|
+
FORCE_CHANGE_PASSWORD: '00299570-246d-11d0-a768-00aa006e0529',
|
|
189
|
+
DS_REPLICATION_GET_CHANGES: '1131f6aa-9c07-11d1-f79f-00c04fc2dcd2',
|
|
190
|
+
DS_REPLICATION_GET_CHANGES_ALL: '1131f6ad-9c07-11d1-f79f-00c04fc2dcd2',
|
|
191
|
+
DS_REPLICATION_GET_CHANGES_IN_FILTERED_SET: '89e95b76-444d-4c62-991a-0facbeda640c',
|
|
192
|
+
|
|
193
|
+
// Property sets
|
|
194
|
+
SELF_MEMBERSHIP: 'bf9679c0-0de6-11d0-a285-00aa003049e2', // Add self to group
|
|
195
|
+
|
|
196
|
+
// Schema objects for LAPS
|
|
197
|
+
LAPS_PASSWORD: 'e91556f8-b3c8-4b66-b3c8-4b0c8ac2c45b',
|
|
198
|
+
|
|
199
|
+
// Certificate enrollment
|
|
200
|
+
CERTIFICATE_ENROLLMENT: '0e10c968-78fb-11d2-90d4-00c04f79dc55',
|
|
201
|
+
CERTIFICATE_AUTOENROLLMENT: 'a05b8cc2-17bc-4802-a710-e7c15ab866a2',
|
|
202
|
+
} as const;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Access mask bits for ACL analysis
|
|
206
|
+
*/
|
|
207
|
+
export const ACCESS_MASK = {
|
|
208
|
+
GENERIC_READ: 0x80000000,
|
|
209
|
+
GENERIC_WRITE: 0x40000000,
|
|
210
|
+
GENERIC_EXECUTE: 0x20000000,
|
|
211
|
+
GENERIC_ALL: 0x10000000,
|
|
212
|
+
MAXIMUM_ALLOWED: 0x02000000,
|
|
213
|
+
ACCESS_SYSTEM_SECURITY: 0x01000000,
|
|
214
|
+
SYNCHRONIZE: 0x00100000,
|
|
215
|
+
WRITE_OWNER: 0x00080000,
|
|
216
|
+
WRITE_DACL: 0x00040000,
|
|
217
|
+
READ_CONTROL: 0x00020000,
|
|
218
|
+
DELETE: 0x00010000,
|
|
219
|
+
WRITE_PROPERTY: 0x00000020,
|
|
220
|
+
READ_PROPERTY: 0x00000010,
|
|
221
|
+
SELF: 0x00000008,
|
|
222
|
+
LIST_OBJECT: 0x00000080,
|
|
223
|
+
DELETE_TREE: 0x00000040,
|
|
224
|
+
CONTROL_ACCESS: 0x00000100, // Extended right
|
|
225
|
+
} as const;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Well-known privileged SID suffixes (relative to domain SID)
|
|
229
|
+
*/
|
|
230
|
+
export const PRIVILEGED_SID_SUFFIXES = {
|
|
231
|
+
DOMAIN_ADMINS: '-512',
|
|
232
|
+
DOMAIN_USERS: '-513',
|
|
233
|
+
DOMAIN_GUESTS: '-514',
|
|
234
|
+
DOMAIN_COMPUTERS: '-515',
|
|
235
|
+
DOMAIN_CONTROLLERS: '-516',
|
|
236
|
+
SCHEMA_ADMINS: '-518',
|
|
237
|
+
ENTERPRISE_ADMINS: '-519',
|
|
238
|
+
GROUP_POLICY_CREATOR_OWNERS: '-520',
|
|
239
|
+
KEY_ADMINS: '-526',
|
|
240
|
+
ENTERPRISE_KEY_ADMINS: '-527',
|
|
241
|
+
ADMINISTRATORS: '-544',
|
|
242
|
+
BACKUP_OPERATORS: '-551',
|
|
243
|
+
ACCOUNT_OPERATORS: '-548',
|
|
244
|
+
SERVER_OPERATORS: '-549',
|
|
245
|
+
PRINT_OPERATORS: '-550',
|
|
246
|
+
} as const;
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Check if a node element in chain
|
|
250
|
+
*/
|
|
251
|
+
export function isAttackGraphNode(element: AttackChainElement): element is AttackGraphNode {
|
|
252
|
+
return 'type' in element && 'name' in element && !('relation' in element);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Check if a relation element in chain
|
|
257
|
+
*/
|
|
258
|
+
export function isAttackGraphRelation(element: AttackChainElement): element is AttackGraphRelation {
|
|
259
|
+
return 'relation' in element;
|
|
260
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Finding } from './finding.types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Audit Types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export type Provider = 'active-directory' | 'azure';
|
|
8
|
+
|
|
9
|
+
export interface AuditOptions {
|
|
10
|
+
includeDetails?: boolean;
|
|
11
|
+
includeComputers?: boolean;
|
|
12
|
+
includeConfig?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface AuditSummary {
|
|
16
|
+
totalFindings: number;
|
|
17
|
+
critical: number;
|
|
18
|
+
high: number;
|
|
19
|
+
medium: number;
|
|
20
|
+
low: number;
|
|
21
|
+
riskScore: number;
|
|
22
|
+
categoryScores?: Record<string, number>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface AuditMetadata {
|
|
26
|
+
auditId: string;
|
|
27
|
+
provider: Provider;
|
|
28
|
+
timestamp: string;
|
|
29
|
+
duration: number; // milliseconds
|
|
30
|
+
objectsCounted?: {
|
|
31
|
+
users?: number;
|
|
32
|
+
groups?: number;
|
|
33
|
+
computers?: number;
|
|
34
|
+
policies?: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface AuditResult {
|
|
39
|
+
metadata: AuditMetadata;
|
|
40
|
+
summary: AuditSummary;
|
|
41
|
+
findings: Finding[];
|
|
42
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure AD Types
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface AzureUser {
|
|
6
|
+
// Core identity
|
|
7
|
+
id: string;
|
|
8
|
+
userPrincipalName: string;
|
|
9
|
+
displayName?: string;
|
|
10
|
+
mail?: string;
|
|
11
|
+
givenName?: string;
|
|
12
|
+
surname?: string;
|
|
13
|
+
|
|
14
|
+
// Organization
|
|
15
|
+
jobTitle?: string;
|
|
16
|
+
department?: string;
|
|
17
|
+
companyName?: string;
|
|
18
|
+
manager?: { id?: string; displayName?: string } | string;
|
|
19
|
+
officeLocation?: string;
|
|
20
|
+
employeeId?: string;
|
|
21
|
+
|
|
22
|
+
// Dates
|
|
23
|
+
createdDateTime?: string;
|
|
24
|
+
lastSignInDateTime?: string;
|
|
25
|
+
lastPasswordChangeDateTime?: string;
|
|
26
|
+
|
|
27
|
+
// Security
|
|
28
|
+
accountEnabled: boolean;
|
|
29
|
+
userType?: string; // "Member" | "Guest"
|
|
30
|
+
riskLevel?: string;
|
|
31
|
+
riskState?: string;
|
|
32
|
+
isMfaRegistered?: boolean;
|
|
33
|
+
strongAuthenticationMethods?: unknown[];
|
|
34
|
+
assignedLicenses?: Array<{ skuId?: string }>;
|
|
35
|
+
memberOf?: Array<{ id?: string; displayName?: string }> | string[];
|
|
36
|
+
passwordPolicies?: string;
|
|
37
|
+
|
|
38
|
+
// Allow additional attributes
|
|
39
|
+
[key: string]: unknown;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface AzureGroup {
|
|
43
|
+
id: string;
|
|
44
|
+
displayName: string;
|
|
45
|
+
mailEnabled: boolean;
|
|
46
|
+
securityEnabled: boolean;
|
|
47
|
+
groupTypes?: string[];
|
|
48
|
+
members?: string[];
|
|
49
|
+
[key: string]: unknown;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface AzureApp {
|
|
53
|
+
id: string;
|
|
54
|
+
appId: string;
|
|
55
|
+
displayName: string;
|
|
56
|
+
createdDateTime?: string;
|
|
57
|
+
signInAudience?: string;
|
|
58
|
+
[key: string]: unknown;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface AzurePolicy {
|
|
62
|
+
id: string;
|
|
63
|
+
displayName: string;
|
|
64
|
+
state?: string;
|
|
65
|
+
conditions?: unknown;
|
|
66
|
+
grantControls?: unknown;
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Types
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface ServerConfig {
|
|
6
|
+
port: number;
|
|
7
|
+
nodeEnv: 'development' | 'production' | 'test';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface JWTConfig {
|
|
11
|
+
privateKeyPath: string;
|
|
12
|
+
publicKeyPath: string;
|
|
13
|
+
tokenExpiry: string;
|
|
14
|
+
tokenMaxUses: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface InfoEndpointsConfig {
|
|
18
|
+
tokenInfoEnabled: boolean;
|
|
19
|
+
providersInfoEnabled: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface LDAPConfig {
|
|
23
|
+
url: string;
|
|
24
|
+
bindDN: string;
|
|
25
|
+
bindPassword: string;
|
|
26
|
+
baseDN: string;
|
|
27
|
+
tlsVerify: boolean;
|
|
28
|
+
caCertPath?: string;
|
|
29
|
+
timeout: number;
|
|
30
|
+
skipHostnameVerification?: boolean;
|
|
31
|
+
tlsServername?: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface AzureConfig {
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
tenantId?: string;
|
|
37
|
+
tenantName?: string;
|
|
38
|
+
clientId?: string;
|
|
39
|
+
clientSecret?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface SMBConfig {
|
|
43
|
+
enabled: boolean;
|
|
44
|
+
/** Username for SMB auth (defaults to LDAP user if not set) */
|
|
45
|
+
username?: string;
|
|
46
|
+
/** Password for SMB auth (defaults to LDAP password if not set) */
|
|
47
|
+
password?: string;
|
|
48
|
+
/** Connection timeout in ms */
|
|
49
|
+
timeout: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Azure config with required credentials (for GraphProvider) */
|
|
53
|
+
export interface AzureProviderConfig {
|
|
54
|
+
tenantId: string;
|
|
55
|
+
clientId: string;
|
|
56
|
+
clientSecret: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface LoggingConfig {
|
|
60
|
+
level: 'error' | 'warn' | 'info' | 'debug';
|
|
61
|
+
format: 'json' | 'simple';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface DatabaseConfig {
|
|
65
|
+
path: string;
|
|
66
|
+
enableWAL: boolean;
|
|
67
|
+
busyTimeout: number;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AppConfig {
|
|
71
|
+
server: ServerConfig;
|
|
72
|
+
infoEndpoints: InfoEndpointsConfig;
|
|
73
|
+
jwt: JWTConfig;
|
|
74
|
+
ldap: LDAPConfig;
|
|
75
|
+
azure: AzureConfig;
|
|
76
|
+
smb: SMBConfig;
|
|
77
|
+
logging: LoggingConfig;
|
|
78
|
+
database: DatabaseConfig;
|
|
79
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Error Classes
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export class BaseError extends Error {
|
|
6
|
+
constructor(
|
|
7
|
+
message: string,
|
|
8
|
+
public statusCode: number = 500,
|
|
9
|
+
public isOperational: boolean = true
|
|
10
|
+
) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = this.constructor.name;
|
|
13
|
+
Error.captureStackTrace(this, this.constructor);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class AuthenticationError extends BaseError {
|
|
18
|
+
constructor(message = 'Authentication failed') {
|
|
19
|
+
super(message, 401);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class AuthorizationError extends BaseError {
|
|
24
|
+
constructor(message = 'Insufficient permissions') {
|
|
25
|
+
super(message, 403);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class ValidationError extends BaseError {
|
|
30
|
+
constructor(message = 'Validation failed') {
|
|
31
|
+
super(message, 400);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class NotFoundError extends BaseError {
|
|
36
|
+
constructor(message = 'Resource not found') {
|
|
37
|
+
super(message, 404);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class LDAPConnectionError extends BaseError {
|
|
42
|
+
constructor(message = 'LDAP connection failed') {
|
|
43
|
+
super(message, 503);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export class GraphAPIError extends BaseError {
|
|
48
|
+
constructor(message = 'Graph API request failed') {
|
|
49
|
+
super(message, 502);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export class AuditExecutionError extends BaseError {
|
|
54
|
+
constructor(message = 'Audit execution failed') {
|
|
55
|
+
super(message, 500);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export class TokenExpiredError extends BaseError {
|
|
60
|
+
constructor(message = 'Token has expired') {
|
|
61
|
+
super(message, 401);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export class RateLimitError extends BaseError {
|
|
66
|
+
constructor(message = 'Rate limit exceeded') {
|
|
67
|
+
super(message, 429);
|
|
68
|
+
}
|
|
69
|
+
}
|