Skip to content

Commit a6c3c26

Browse files
authored
Merge pull request #361 from vbakke/feat/usage
New Usage - Suggestion
2 parents 78a1373 + b8d58b6 commit a6c3c26

File tree

13 files changed

+605
-445
lines changed

13 files changed

+605
-445
lines changed

README.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ From a startup to a multinational corporation the software development industry
44

55
The OWASP DevSecOps Maturity Model provides opportunities to harden DevOps strategies and shows how these can be prioritized.
66

7-
With the help of DevOps strategies security can also be enhanced. For example, each component such as application libraries and operating system libraries in docker images can be tested for known vulnerabilities.
7+
With the help of DevOps strategies security can also be enhanced. For example, each component such as application libraries and operating system libraries in docker images can be tested for known vulnerabilities.
88

99
Attackers are intelligent and creative, equipped with new technologies and purpose. Under the guidance of the forward-looking DevSecOps Maturity Model, appropriate principles and measures are at hand implemented which counteract the attacks.
1010

@@ -63,9 +63,9 @@ In case you would like to perform a DevSecOps assessment, the following tools ar
6363
3. Browse to <http://localhost:8080> (on macOS and Windows browse to <http://192.168.99.100:8080> if you are using docker-machine instead
6464
of the native docker installation)
6565

66-
For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom. In case you would like to have perform an assessment for multiple teams, iterate from port 8080 to 8XXX, depending of the size of your team.
66+
For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom.
6767

68-
You can download your current state from the circular headmap and mount it again via
68+
You can download your current state from the circular heatmap and mount it again via
6969

7070
```bash
7171
wget https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml # or go to /circular-heatmap and download edited yaml (bottom right)
@@ -124,10 +124,18 @@ In the corresponding [dimension YAMLs](https://github.com/devsecopsmaturitymodel
124124
[...]
125125
teamsImplemented:
126126
Default: false
127+
B: true
127128
C: true
128-
evidence:
129-
B: Showed Jenkinsfile
129+
teamsEvidence:
130+
B: All team members completed OWASP Secure Coding Dojo training on 2025-01-11.
131+
C: |
132+
The pentest report from 2025 has been split into Jira tasks under
133+
[TODO-123](https://jira.example.com/issues/TODO-123).
134+
135+
_2025-04-01:_ All fixes of **critical** findings are deployed to production.
130136
```
137+
The `|` is yaml syntax to indicate that the evidence spans multiple lines. Markdown
138+
syntax can be used. The evidence is currently visible on the activity from the Matrix page.
131139

132140
# Back link
133141

src/app/app-routing.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ const routes: Routes = [
1414
{ path: 'circular-heatmap', component: CircularHeatmapComponent },
1515
{ path: 'activity-description', component: ActivityDescriptionComponent },
1616
{ path: 'mapping', component: MappingComponent },
17-
{ path: 'usage', component: UsageComponent },
17+
{ path: 'usage', redirectTo: 'usage/' },
18+
{ path: 'usage/:page', component: UsageComponent },
1819
{ path: 'teams', component: TeamsComponent },
1920
{ path: 'about', component: AboutUsComponent },
2021
{ path: 'userday', component: UserdayComponent },

src/app/component/readme-to-html/readme-to-html.component.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
/*background-color: aqua;*/
33
padding: 30px;
44
padding-top: 0px;
5-
6-
}
5+
max-width: 40rem;
6+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<div class="main-section">
2-
<div [innerHTML]="toRender"></div>
2+
<article [innerHTML]="toRender"></article>
33
</div>

src/app/component/teams/teams.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export class TeamsComponent implements OnInit {
1313
teamGroups: Map<string, string[]> = new Map();
1414

1515
constructor(private yaml: ymlService) {}
16+
1617
ngOnInit(): void {
1718
this.yaml.setURI('./assets/YAML/meta.yaml');
1819
// Function sets column header
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<app-top-header section="Usage"></app-top-header>
2-
<app-readme-to-html MDFile="./assets/Markdown Files/USAGE.md">
2+
<app-readme-to-html
3+
class="usage-{{ page }}"
4+
MDFile="./assets/Markdown Files/{{ page }}.md">
35
</app-readme-to-html>

src/app/component/usage/usage.component.spec.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { ComponentFixture, TestBed } from '@angular/core/testing';
22

33
import { UsageComponent } from './usage.component';
4+
import { ActivatedRoute } from '@angular/router';
5+
import { of } from 'rxjs';
46

57
describe('UsageComponent', () => {
68
let component: UsageComponent;
@@ -12,13 +14,28 @@ describe('UsageComponent', () => {
1214
}).compileComponents();
1315
});
1416

15-
beforeEach(() => {
17+
it('should create', () => {
18+
TestBed.overrideProvider(ActivatedRoute, {
19+
useValue: { params: of({}) },
20+
});
21+
1622
fixture = TestBed.createComponent(UsageComponent);
1723
component = fixture.componentInstance;
1824
fixture.detectChanges();
19-
});
2025

21-
it('should create', () => {
2226
expect(component).toBeTruthy();
27+
expect(component.page).toBe('USAGE');
28+
});
29+
30+
it('should load page', () => {
31+
TestBed.overrideProvider(ActivatedRoute, {
32+
useValue: { params: of({ page: 'test-page' }) },
33+
});
34+
35+
fixture = TestBed.createComponent(UsageComponent);
36+
component = fixture.componentInstance;
37+
fixture.detectChanges();
38+
39+
expect(component.page).toBe('test-page');
2340
});
2441
});
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
1-
import { Component } from '@angular/core';
1+
import { Component, OnInit } from '@angular/core';
2+
import { ActivatedRoute } from '@angular/router';
23

34
@Component({
45
selector: 'app-usage',
56
templateUrl: './usage.component.html',
67
styleUrls: ['./usage.component.css'],
78
})
8-
export class UsageComponent {
9-
constructor() {}
9+
export class UsageComponent implements OnInit {
10+
page: string = 'USAGE';
11+
constructor(private route: ActivatedRoute) {}
12+
13+
ngOnInit() {
14+
if (this.route && this.route.params) {
15+
this.route.params.subscribe(params => {
16+
let page = params['page'];
17+
// CWE-79 - sanitize input
18+
if (page.match(/^[\w.-]+$/)) {
19+
this.page = page;
20+
}
21+
});
22+
}
23+
}
1024
}

src/assets/Markdown Files/README.md

Lines changed: 59 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,26 @@ Attackers are intelligent and creative, equipped with new technologies and purpo
1010

1111
# Usage
1212

13-
Go to https://dsomm.timo-pagel.de or clone [this repository](https://github.com/wurstbrot/DevSecOps-MaturityModel/) and run `startDocker.bash`.
13+
Go to https://dsomm.owasp.org.
1414

1515
* _matrix_ shows the dimensions, subdimensions and activities are described.
16-
* _Implementation Levels_ can be used to measure the current implementation level by clicking on the specific activities which have been performed.
17-
* _Ease and Value of Implementation_ is used for the maturity model development to see the ease and value of each activity to be able to compare it with activities within the subdimension and activities from other subdimensions.
18-
* _Dependenies_ shows the dependencies between activities
19-
* _Useage_ describes the dimensions
20-
* _Full Report_ prints all activities to be able to print it
16+
* _Implementation Levels_ can be used to show the current implementation level by clicking on the specific activities which have been performed (it is recommended to use a gitops-like flow)
17+
* _Mappings_ Shows mappings to other standards and provides the ability to download an excel sheet
18+
* _Usage_ describes how to use DSOMM
2119

2220
In this [video](https://www.youtube.com/watch?v=tX9RHZ_O5NU) Timo Pagel describes different strategic approaches for your secure DevOps strategy. The use OWASP DSOMM in combination with [OWASP SAMM](https//owaspsamm.org) is explained.
2321

2422
In case you have evidence or review questions to gather evidence, you can add the attribute "evidence" to an activity which will be attached to an activity to provide it to your CISO or your customer's CISO.
2523
You can switch on to show open TODO's for evidence by changing IS_SHOW_EVIDENCE_TODO to true 'bib.php' `define(IS_SHOW_EVIDENCE_TODO, true);`
2624

27-
# Community
25+
This page uses the Browser's localStorage to store the state of the circular headmap.
26+
27+
# Changes
28+
Changes to the application are displayed at the release page of [DevSecOps-MaturityModel](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/releases).
2829

29-
Code Freeze: Currently, with the Google Summer student Aryan Prasad we develop a new Angular frontend version, therefore, we do not accept any code changes right now.
30+
Changes to the maturity model content are displayed at the release page of [DevSecOps-MaturityModel-data](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/releases).
3031

32+
# Community
3133
Join #dsomm in [OWASP Slack](https://owasp.slack.com/join/shared_invite/zt-g398htpy-AZ40HOM1WUOZguJKbblqkw#/).
3234
Create issues or even better Pull Requests in [github](https://github.com/wurstbrot/DevSecOps-MaturityModel/).
3335

@@ -57,31 +59,22 @@ In case you would like to perform a DevSecOps assessment, the following tools ar
5759
## Container
5860

5961
1. Install [Docker](https://www.docker.com)
60-
2. Run `docker run --rm -p 8080:8080 wurstbrot/dsomm:latest`
62+
2. Run `docker pull wurstbrot/dsomm:latest && docker run --rm -p 8080:8080 wurstbrot/dsomm:latest`
6163
3. Browse to <http://localhost:8080> (on macOS and Windows browse to <http://192.168.99.100:8080> if you are using docker-machine instead
6264
of the native docker installation)
6365

64-
In case you would like to have perform an assessment for multiple teams, iterate from port 8080 to 8XXX, depending of the size of your team.
65-
In case the application should be visible, but the "Implementation Level" shouldn't be changeable, consider the following code:
66+
For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom.
6667

67-
```bash
68-
#!/bin/bash
69-
set -xe
68+
You can download your current state from the circular heatmap and mount it again via
7069

71-
IMAGE_NAME="<YOUR ORGANIZATION>/dsomm:latest"
72-
73-
rm -Rf DevSecOps-MaturityModel || true
74-
git clone git@github.com:wurstbrot/DevSecOps-MaturityModel.git
75-
cp data/* DevSecOps-MaturityModel/data
76-
cp -a selectedData.csv DevSecOps-MaturityModel/selectedData.csv
77-
78-
cd DevSecOps-MaturityModel
79-
docker build -t $IMAGE_NAME .
80-
docker push $IMAGE_NAME
70+
```bash
71+
wget https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml # or go to /circular-heatmap and download edited yaml (bottom right)
72+
docker run -p 8080:8080 -v /tmp/generated.yaml:/srv/assets/YAML/generated/generated.yaml wurstbrot/dsomm:latest
8173
```
8274

83-
This approach also allows teams to perform self assessment with changes tracked in a repository.
75+
.
8476

77+
This approach also allows teams to perform self assessment with changes tracked in a repository.
8578

8679
## Amazon EC2 Instance
8780

@@ -97,29 +90,52 @@ This approach also allows teams to perform self assessment with changes tracked
9790

9891
```bash
9992
#!/bin/bash
100-
yum update -y
101-
yum install -y docker
10293
service docker start
103-
docker run -d -p 80:80 wurstbrot/dsomm:latest
94+
docker run -d -p 80:8080 wurstbrot/dsomm:latest
10495
```
10596

106-
## Tests
97+
## Activity Definitions
98+
The definition of the activities are in the [data-repository](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data).
10799

108-
To run basic tests just
100+
## Teams and Groups
101+
To customize these teams, you can create your own [meta.yaml](src/assets/meta.yaml) file with your unique team definitions.
109102

110-
```bash
111-
docker-compose -f docker-compose.dev.yaml up test-php
112-
```
103+
Assessments within the framework can be based on either a team or a specific application, which can be referred to as the context. Depending on how you define the context or teams, you may want to group them together.
113104

114-
# Credits
105+
Here are a couple of examples to illustrate this, in breakers the DSOMM word:
106+
- Multiple applications (teams) can belong to a single overarching team (application).
107+
- Multiple teams (teams) can belong to a larger department (group).
115108

116-
* The dimension _Test and Verification_ is based on Christian Schneiders [Security DevOps Maturity Model (SDOMM)](https://www.christian-schneider.net/SecurityDevOpsMaturityModel.html). _Application tests_ and _Infrastructure tests_ are added by Timo Pagel. Also, the sub-dimension _Static depth_ has been evaluated by security experts at [OWASP Stammtisch Hamburg](https://www.owasp.org/index.php/OWASP_German_Chapter_Stammtisch_Initiative/Hamburg).
117-
* The sub-dimension <i>Process</i> has been added after a discussion with [Francois Raynaud](https://www.linkedin.com/in/francoisraynaud/) that reactive activities are missing.
118-
* Enhancement of my basic translation is performed by [Claud Camerino](https://github.com/clazba).
119-
* Adding ISO 27001:2017 mapping, [Andre Baumeier](https://github.com/AndreBaumeier).
120-
* Providing a documentation of how to use `docker` in the Juice Shop for simple copy&paste, [Björn Kimminich](https://github.com/bkimminich/).
121-
* [OWASP Project Integration Project Writeup](https://github.com/OWASP/www-project-integration-standards/blob/master/writeups/owasp_in_sdlc/index.md) for providing documentation on different DevSecOps practices which are copied&pasted/ (and adopted) (https://github.com/northdpole, https://github.com/ThunderSon)
122-
* The requirements from [level 0](https://github.com/AppSecure-nrw/security-belts/blob/master/white/) are based on/copied from [AppSecure NRW](https://appsecure.nrw/)
109+
Feel free to create your own [meta.yaml](src/assets/meta.yaml) file to tailor the framework to your specific needs and mount it in your environment (e.g. kubernetes or docker).
110+
Here is an example to start docker with customized meta.yaml:
111+
```
112+
# Customized meta.yaml
113+
cp src/assets/YAML/meta.yaml .
114+
docker run -v $(pwd)/meta.yaml:/srv/assets/YAML/meta.yaml -p 8080:8080 wurstbrot/dsomm
115+
116+
# Customized meta.yaml and generated.yaml
117+
cp src/assets/YAML/meta.yaml .
118+
cp $(pwd)/src/assets/YAML/generated/generated.yaml .
119+
docker run -v $(pwd)/meta.yaml:/srv/assets/YAML/meta.yaml -v $(pwd)/generated.yaml:/srv/assets/YAML/generated/generated.yaml -p 8080:8080 wurstbrot/dsomm
120+
```
121+
122+
In the corresponding [dimension YAMLs](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/tree/main/src/assets/YAML/default), use:
123+
```
124+
[...]
125+
teamsImplemented:
126+
Default: false
127+
B: true
128+
C: true
129+
teamsEvidence:
130+
B: All team members completed OWASP Secure Coding Dojo training on 2025-01-11.
131+
C: |
132+
The pentest report from 2025 has been split into Jira tasks under
133+
[TODO-123](https://jira.example.com/issues/TODO-123).
134+
135+
_2025-04-01:_ All fixes of **critical** findings are deployed to production.
136+
```
137+
The `|` is yaml syntax to indicate that the evidence spans multiple lines. Markdown
138+
syntax can be used. The evidence is currently visible on the activity from the Matrix page.
123139

124140
# Back link
125141

@@ -145,6 +161,8 @@ Multilanguage support is not given currently and not planned.
145161

146162
[![Apprio Inc](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master-old/assets/images/Apiiro_black_logo.png)](https://apiiro.com/)
147163

164+
[![Heroku (hosting)](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master/src/assets/images/sponsors/heroku.png)](https://www.heroku.com/open-source-credit-program)
165+
148166
# Donations
149167

150168
If you are using the model or you are inspired by it, want to help but don't want to create pull requests? You can donate at the [OWASP Project Wiki Page](https://owasp.org/donate/?reponame=www-project-devsecops-maturity-model&title=OWASP+Devsecops+Maturity+Model). Donations might be used for the design of logos/images/design or travels.

0 commit comments

Comments
 (0)