A lightweight Information Security Management (ISMS) extension for iTop that adds Assets, Risks, Controls and their relations - including inherent/residual/target risk evaluation, aggregation of control effects, validations, and tidy UI presentations.
Tested with recent iTop 3.2 lines.
ISMSAssetType
(typology)ISMSAsset
(with owner/guardian, dependencies and review dates)ISMSRisk
(inherent / residual / target, treatment & acceptance)ISMSControl
(reusable controls with their own lifecycle)lnkSupportingAssetToAsset
, lnkISMSRiskToISMSAsset
, lnkISMSRiskToISMSControl
pre_likelihood × pre_impact
tgt_likelihood × tgt_impact
low
(<5), medium
(5–9), high
(10–15), extreme
(≥16)max
(default): take the max reduction per dimensionsum_capped
: sum reductions and cap so residual never goes below 1EVENT_DB_BEFORE_WRITE
, EVENT_DB_COMPUTE_VALUES
, EVENT_DB_LINKS_CHANGED
br-isms/
) into your iTop extensions/
directory.Global default for risk control aggregation (per-risk can override):
// in config-itop.php
'isms_risk_aggregation_mode' => 'max', // 'max' or 'sum_capped'
name
, description
)ISMSAsset
draft → published → obsolete
(reopen to draft if allowed)ref
, name
, org_id
, assetowner_id
, assetguardian_id
, category
, assettype_id
creation_date
(auto), publish_date
(on publish), last_update
(auto), next_review
(default +1y)supportingassets_list
/ supportedassets_list
via lnkSupportingAssetToAsset
risks_list
via lnkISMSRiskToISMSAsset
published
: identity/context read-only; review dates editablestateDiagram-v2
[*] --> draft
draft --> published: ev_publish
published --> draft: ev_draft
published --> obsolete: ev_obsolete
obsolete --> draft: ev_reopen
draft → published → obsolete
(optional reopen to draft)risk_category
, risk_cause
, risk_event
, risk_consequence
, description
pre_*
), Residual (res_*
), Target (tgt_*
)treatment_decision
, treatment_owner_id
, treatment_due
, treatment_plan
acceptance_status
, accepted_by_id
, acceptance_date
, acceptance_rationale
lnkISMSRiskToISMSControl
(only effective links contribute to computations)lnkISMSRiskToISMSAsset
stateDiagram-v2
[*] --> draft
draft --> published: ev_publish
published --> draft: ev_draft
published --> obsolete: ev_obsolete
obsolete --> draft: ev_reopen
draft → submitted → approved → implementing → effective → (suspended ↔ effective) → retired
name
, org_id
, controlowner_id
, control_domain
, control_type
, implementation_date
, next_review
lnkISMSRiskToISMSControl
stateDiagram-v2
[*] --> draft
draft --> submitted: ev_submit
submitted --> approved: ev_approve
approved --> implementing: ev_start_impl
implementing --> effective: ev_mark_effective
effective --> suspended: ev_suspend
suspended --> effective: ev_resume
approved --> retired: ev_retire
implementing --> retired: ev_retire
effective --> retired: ev_retire
suspended --> retired: ev_retire
Inherent
If both pre_likelihood
and pre_impact
> 0
→ pre_score = pre_likelihood × pre_impact
→ pre_level = MapScoreToLevel(pre_score)
effect_on_likelihood
, effect_on_impact
max
→ take max per dimensionsum_capped
→ sum and cap so res_dimension ≥ 1
res_likelihood = max(1, pre_likelihood − effect_like)
(or null
if pre is missing)res_impact = max(1, pre_impact − effect_imp)
res_score
and res_level
from current res_*
Target
If both tgt_likelihood
and tgt_impact
> 0
→ tgt_score
& tgt_level
computed similarly.
extreme
(≥16), high
(≥10), medium
(≥5), low
(<5).acceptance_status = accepted
or missing accepted_by
/ acceptance_date
: warn(See EvtCheckToWrite
for the exact messages)
EvtSetInitialAttributeFlags
/ EvtSetAttributeFlags
Enforce read-only on computed fields; dynamic lock of residual values when control effects apply.EvtBeforeWrite
/ EvtComputeValues
/ EvtLinksChanged
Recompute scores and touch last_update
.EvtCheckToWrite
Add user warnings for the validations above.DBInsertNoReload
+ counters
Generate human-friendly references:
A-%04d
R-%04d
This chapter defines who is Responsible (R), Accountable (A), Consulted (C), and Informed (I) for key activities within the ISMS extension.
Legend: R = Responsible (does the work) • A = Accountable (final decision/ownership) • C = Consulted (two-way) • I = Informed (one-way)
Organization scope/visibility is governed separately from these role profiles.
Activity | ISMS Manager | Asset Maintainer | Risk Analyst | Control Maintainer | Viewer |
---|---|---|---|---|---|
Maintain Asset Types (ISMSAssetType ) |
A/R | I | I | I | I |
Activity | ISMS Manager | Asset Maintainer | Risk Analyst | Control Maintainer | Viewer |
---|---|---|---|---|---|
Create / update Asset (ISMSAsset ) |
A | R | I | I | I |
Publish asset (→ published ) |
A/R | I | I | I | I |
Obsolete asset (→ obsolete ) |
A/R | I | I | I | I |
Reopen asset (→ draft ) |
A/R | I | I | I | I |
Maintain supporting/supported links (lnkSupportingAssetToAsset ) |
A | R | C | I | I |
Activity | ISMS Manager | Asset Maintainer | Risk Analyst | Control Maintainer | Viewer |
---|---|---|---|---|---|
Create / update Risk (ISMSRisk ) |
A | I | R | I | I |
Publish risk (→ published ) |
A/R | I | I | I | I |
Obsolete / reopen risk | A/R | I | I | I | I |
Maintain Risk ↔ Asset links (lnkISMSRiskToISMSAsset ) |
A | I | R | I | I |
Maintain Risk ↔ Control links (lnkISMSRiskToISMSControl ) |
A | I | R | C | I |
Define treatment (decision/owner/due/plan, target residual) | A | C | R | C | I |
Record risk acceptance (status/by/date/rationale) | A/R | I | C | I | I |
Activity | ISMS Manager | Asset Maintainer | Risk Analyst | Control Maintainer | Viewer |
---|---|---|---|---|---|
Create / update Control (ISMSControl ) |
A | I | I | R | I |
Submit control (→ internal review) | A | I | I | R | I |
Approve control | A/R | I | I | C | I |
Start implementation | A | I | I | R | I |
Mark effective | A/R | I | I | C | I |
Suspend / resume | A | I | I | R | I |
Retire | A/R | I | I | C | I |
lnkSupportingAssetToAsset
) by Asset Maintainer.lnkISMSRiskToISMSAsset
, lnkISMSRiskToISMSControl
) by Risk Analyst.pre_*
)link_status = effective
and effects).dictionaries/
.PRs and issues welcome. Please:
TBD
Built with ❤️ for iTop admins who run an ISMS and want a pragmatic, automation-friendly data model without the bloat.