Transcript
This transcript was autogenerated. To make changes, submit a PR.
Welcome to my talk iterative threat modeling enhancing security in
agile development little introduction about me my
name is Jagdesh Chant, also known as Jax. I'm a full stack developer
who plays devsecops role in dev thoughtworks.
The paint trip model shows the skill sets I
have and the deep knowledge respectively. I always find ways
to implement shift security left approach and encourage teams
to follow security development. I'm also an OSWe
batch holder from offensivesyc along with an AWS
security specialist batch. You can follow me in LinkedIn
for any security related news and articles.
This is the outline of the talk.
First we are going to see what is threats modeling, followed by agile
threat modeling. Explain with a simulation of how to run the exercise,
and finally how to incorporate the
same into our agile rituals to achieve iterative threat
modeling. Before finishing, we will take a step back
and see how to run the threat modeling in different parts
of the ongoing project. So first,
what is a threat modeling? It's an exercise used
to identify threats or
different ways to attack a system and model it properly
so that the development and operations team can come up with ideas
to mitigate it. By doing this proactively,
we can prevent the software that we
have developed from being compromised by the attackers
before it is too late. The traditional threat modeling exercise
involves mainly security specialists with very
few stakeholders from tech teams development teams.
They collaborate, discuss,
identify threats and propose a mitigation
response plan for it without the development
teams much involved. The problem with the traditional
threat modeling is that it does not involve development teams
and this creates a
lot of misconceptions around it. The main misconception is that the
penetration revisiting and the code
reviews can compensate for threat modeling.
These two activities are very
effective in finding bugs and making sure the high quality of the software
not for security assessment. Threat modeling will uncover
design flaws which cannot be identified by
these techniques. Without understanding the potential threats
an application faces, we cannot ensure in addressing
all the risk. And the second misconception
is lot of people think that threats modeling can be done after the
delivery the software, which is very big red
flag. This puts the development lifecycle in a
brittle situation where the threat modeling discovers a foundational
security threat which requires a rewrite of the entire
architecture of the system. And last misconception
is that it is too much of time consuming
and it is complex. Yes, it is,
if you only at a first glance, but if
you follow a simple steps, we can achieve threat modeling
in a limited time period. These misconceptions
created the dawn of agile threat modeling
in order to run a threat modeling in an agile software development,
we are in need of certain requirements like we
need to bring a defensive mindset into
the development team so that the development team
have the knowledge on security implications.
Second, we need to create a collaborative,
tailored approach with the development team for capturing threats
proactively. A collaborative approach
with the business teams so that
they can together bring up threats together
and leave some space to individual agile teams
to tailor the need based upon
their working situation. So there should be a space
of each agile teams working in an organization to tailor
the tune the threat modeling to their needs.
And third, one is unawareness.
They need to overcome the human errors because of unawareness.
This development team should be conscious
of the security impacts of the threats,
how it is going to affect the business, how is it going to affect
a different department from their own box small
bubble. They have to think more than their agile
teams. The impact is not only to the development but also
to the business. And the fourth, a simple exercise which
should be introduced at any time of the project and can
be repeated iteratively. So keeping
the requirements in mind and running trial
and errors on various agile teams across thoughtworks.
We came up with these five steps of
agile threat modelling. It is influenced by the
threats modeling framework, but we kept it
very simple to run it in any agile environment.
The first step is to identify what
we want to accomplish in the scope of the exercise,
followed by the representation of the scope.
Then we brainstorm on the ways that can go wrong.
Once we identify what can go wrong,
we discuss about the mitigation values and finally
we reflect our outcomes of the exercise
so that we can do it better next time.
We will go through each of these steps in detail in upcoming slides
to understand the implementation of the exercise.
In the real world scenario, we are going to use
the open source juice shop as our guinea pig
to simulate the agile threat modeling steps.
Little intro about the application the Juice shop is an
online website which takes in
orders of fresh juice and delivers into your home with
a beautiful packaging. Juice shop is the most
vulnerable, insecure application available
in the Internet so that people who want to practice
security, mitigation or security practices, they can
use this application as a guinea pig. And this is
a high level architectural diagram of the juice shop.
We have an front end app, we have a backend juicehop
server which runs in a node JS and we also have a payment service node
js running in the backend with a postgres database.
So few high level legend user
data flow is represented in a vector,
arrow and authorization boundaries also represents
here. So before we get started on our
agile threat modeling exercise, we should have a security objective
to which everyone should adhere to. Security objective
defines the organizational goal towards security,
which includes protecting the main assets of the organization like
customer data, et cetera. If there is an organization
security objective, organizational security objective, we inherit
it, else we create a security objective for our scope.
It is always better to create a security objective
for the organization, but it's not a blocker for
our exercise. Security objectives should revolve
around the principle of CIA triad.
CIA stands for C
for confidentiality. Assets which are
confidential information should never
be compromised. I for
integrity of the data should be protected at all
costs from tampering. Yay for availability.
The service availability should not be interrupted for regular
users because of a security threats and
it should also answer the following questions.
What kind of losses puts the organization
objective in geopolitical? Is it having the customer
database stolen or a payment? Are we worried
about a fraud? Is it malicious insiders
or particularly capable hackers? We will
try to implement the security objective
for our juice shop application.
As the juice shop is an online revenue generating
platform, the impact to
negatively will affect the sales of the shop.
We should take care so that the sales of
the juice shop is not impacted
because of the negative reputation.
Secondly, we should reduce the breach
of personally identifiable information of the customer,
which in turn affects the sales of
this juice shop. Third, we should
reduce the risk of malicious alteration leading to a
financial loss. And finally,
the chance of malicious denial of availability
of the shop to customer should be reduced.
So these are our four security objectives
for the Joshop application.
So let's start with our first step.
What do we want to accomplish?
Scoping. This is an important step of
threat modeling. We should be very conscious in including the
right scoping of the exercise. Always focus on few chunks
before performing the activity. Few best practices in creating
the scope is whenever a new or
upcoming security sensitive feature such as login and checkout flow is coming
up, a particular microservice and its collaborating services
integrating towards it and high level overview of
a system to identify security tech depth.
Stop at the integration level. Do not go
at the details so reducing the scope,
keeping the scope as simple as possible and finally,
the continuous delivery pipeline and delivery infrastructure.
For our simulation. We will scope the customer
login flow as our feature
to run our exercises. So we have a customer login
epic and the acceptance criteria goes
like as a customer I need a page where I can enter login
credentials so that I can access the application as a logged in user.
We also have a dev story card for it.
So this is a new feature that is getting implemented in
a beautiful ecommerce juice shop application. So with
this we'll go to the second equip
representation of the scope. We are going to follow the
software centric approach here in a software
centric model we represent our systems in
a holistic view with the software layers highlighting how
data flows from one system to another system
using an vector arrows and
which is a short form of data flow diagram.
The key principle here is to identify the entry points,
asserts and trust levels that represent
the access rights. You should capture the end
to end flow including the external entity where the
data flows from for every use case with
the system interactions. Of course the key stakeholders
during this exercise is engineers which composes of DevOps
and as well as the development teams. This is an example
of the data flow diagram of the login flow that we
are going to create for the juice shop. So here we have
three systems involved.
The front end app, the back end juice shop server which runs in
the node JS and the external identity provider.
Here the user when
reaches the front end app is redirected to the identity
provider. After authentication it
provides an authentic code auth code which is sent
to juice shop server backend server
backend server validates the auth code.
If the validation is success then
redirects the customer to the home page with
the saved token in the session.
So this is an overview of the dataflow diagram that
we have created for the juice shop login flow.
So moving on with this to the third
step, what can go wrong here?
We are going to evil brainstorm about
how the application can produce threats.
This is where we wear attackers hat in
coming up with ways to attack, break or frustrate a
particular bit of software from attackers mindset.
The key principle is to be aware of the time and never
go into rabbit hole discussion and focus
on quantity over quality.
Create as many as threats possible without stopping to
analyze. Is it really worth or not? And there is a stakeholders
involved in this exercise is a security team,
product owners from the business and engineers.
There are multiple ways or methodologies
to implement the evil brainstorming. Starting from pasta,
attack trees and waste. Each has their own pros
and cons. Pasta is a very
good attacker focus but it has a very comprehensive
assurance exercise. It is a very long running exercise and
we also have a time box strike which is
very applicable for agile teams which we are going to
be concentrating in this exercise or in this
talk specifically this time box
stride is very developer focused.
What is a stride? It's a methodology
to bear attackers hat in different
scenarios, different possible scenarios.
Walking through and identifying,
walking through multiple threats, walking through the different
hats of the attacker like spoofed identity and
identifying if there is a threat or not and capturing
it in our whiteboard or in our beautiful data
flow diagram. So let's understand the stride a little bit,
what it is, the different hacks of the stride and then
try to capture the information s in the stride stands
for spoofed identity. It makes us think if
an attacker can impersonate someone as using
a stolen token, stolen token or a
cookies or just brute forcing it. The key concepts is identity
and authentication and stakeholders
here think through how
an application can fail when there
is lack of authentication, any form of authentication,
tokens or JWT tokens or identifying
if you are the real user to do it. Is there a lack of authentication
inside the system? And we should also go
think through if there is a weakness in the process. The resetting
credentials authentication mechanism
should subject to brute force attack. Are there any
ways attacker can run a brute force attack on
login pages? Can an attacker allow
you use a very
weak password to get into a system or
an already compromised password
to get into a system? So is there any other
way an attacker can spoof themselves as
a customer, a legitimate customer, and get into the system?
So identifying different ways
or scenarios qualifies as a
threat. So once you identify a threat,
capture it in our dataflow diagram. How do
we capture it? We will look into the later slides and
moving on in our stride hacks. T in our
stride stands for tampering with input e. Here the attacker
can go beyond the expected input like giving
an hexadecimal URL, encoded values, special characters in login
credentials, et cetera. The key concept
is validation. Are we doing validation on that unexpected
values the attacker is trying to use?
What is the integrity of the system? What is the injection?
Can the attacker do an cross site scripting?
Inject a malicious script inside the client side and run it?
Does the validation happens in the front end as well as the back
end. These are all the few scenarios and concepts
that the stakeholder has to go through before coming up
a possible threats inside the system.
R in the stride stands for reputation of action.
It makes us think if any attacker can do malicious
activity and get away without getting a proof
of the activity. Key concepts is logging and audit.
Is the logs centralized? Is one of the scenarios that we can think through
if the logs are centralized. Can the malicious user
delete the logs by impersonating other
self or escalating using a different credentials?
So these are the scenarios that we have to look
through or identify in the process of
the exercise or give a chance for the stakeholders
to come up with the threats. So information disclosure,
which is the eye of the stride.
It lets us think if
the system can give more information
what it is supposed to be like. Server versions
in the requested headers, response headers, the key
concepts is the confidentiality, encryption and leakage.
We should not provide an unwanted information when
it is not required. Like are
we handling the unexpected expression gracefully before
sending it to the customer? What's the
applications? What happens if you send an unexpected exception
back to the user? We disclose if you are using a
NoSQL database or SQL database, what is a
version of the server that SQL database we are using
or what is the type of server we are running with
the tech stack. And these are information which
are unwanted to the user.
So we should able to abstract
that information and send it out. So any information
which is not necessary to the user should never be
given to the user. D in stride stands for
denial of service. Can an attacker brings
using bots can run and distribute
a denial of service so that the legitimate users cannot access
the application. Then if they can run
it, then it's a threats. The key concepts is availability.
Whatever threats that compromises
the availability, applications are categorized under
denial of service. Finally,
e in the stripe stands for elevation of privilege.
It makes us think if the attacker can access of
files or systems which they should not be.
This is also applicable to internal employees.
Sensitive files should only be accessed on demand basis.
Key concept is authorization isolation
remote code execution. Few examples that we can
think through is like all the employees,
including nontechnical stakeholders have protection edit
access. Does all the system have authorization
implemented to check the right access of the user
before giving back to the user. So we
had understood what is the stride model till
now and discussed about it. We are going to apply the
stride model on our guinea pig juice shop.
After applying we come up with lot of threats
which is jeopardizing the reputation
of action. Like there is no logs for how many
unauthorized entries comes in. There can be a brute force attack,
there can be a deed distributed denial of service
and tampering with the input. There is no strong password configuration
in our services and also there is a missing configuration
related to elevation of privilege. So these
are all the threats that we have identified
after applying the stride model.
So with this lot of threads in our hand,
we move on to the fourth step. What are we going to do about
it? We are going to prioritize.
This is where the people, the stakeholders
owe the riskiest threats. Keeping our security objective
in mind, the principle is to use a threats model
and the security objective that we have defined in the first
step. Using these two techniques,
we prioritize the most riskiest threat that
we have to concentrate on. What does the dread stands
for? The D stands for damage. How bad
the damage of the threats is? Is it business
as well as the technical how big is the damage?
How reproducible is the attack?
How easy it is reproducible exploitable?
How much work has to be done to launch the attack?
Affected users how many people are affected by the
impact or impacted by this discoverability? D for
discoverability, how easy is to discover the threat? So using the
threats model and security objective, we prioritize the
cards. The stakeholders who prioritize are the security
team, the business stakeholders and the engineers.
And how do we this is an example of
prioritization of the juice shop that
we have done before. The stride model
applying the stride model. So here, as you can
see, we have two cards, ddos and no
strong password configuration. The DDoS
is prioritized top because it affects
the availability and damages the reputation
of the application and it
also increases the possibility
of the reputation of the juice shop because
there is a direct security objective associated with it.
We should reduce the malicious denial of availability of the shop
and the checkout services to the customers.
So that's why the DDoS has been prioritized at
the top. No strong password configuration also
affects the availability of the application and
with a high chance of reproducibility using
an already compromised password or
easily guessable passwords, the tools
available in the market can make sure we run
a brute force attack on dictionary attack on the application
and get the details out of it once the information,
the customer information is revealed.
If the password is too much guessable or
compromised by the attack, it breaches the
personal information identifier
information by the customers, which is our second security
objective. Based upon this security objective and
our dread model, we say that this is a
top security threats. Along with this,
we have three other no logs about how unauthorized entries
APIs are unauthorized. All the APIs are unauthenticated.
Storing customer details in JWT as a classified
or prioritized threat. After identifying
the threat, we are going to mitigate it. How we are
going to mitigate capture the mitigation. It can be a tech step
user story acceptance criteria or Epics or even a
spike to identify if it is a real threats or not. By any
one of these methods we capture the mitigation methods
that we are going to be applied. The common antipattens is not
capturing the mitigations in a project management platform.
If you are using a jira, capture the mitigations in the jira
not in a spreadsheet or emails, which is
not a project management platforms. So you make sure that you
capture the mitigations in the project management platforms and
prioritizing the mitigations over threats just because
the mitigation is a low hanging fruit that should not be done
as first. The threat which is
more riskiest has to be handled
first even though the mitigation is too much complex for
it. And this is an example of
an mitigating that we applied for our juice shop
for the threats identified previously.
So we have created a definition of done which makes sure
all our APIs are authenticated before the moving
the cards to a done. For ddos. We have created acceptance
criteria where the attacker IP
address has to be rejected if
it is found to be malicious and a tech tab
for strong password configuration and epic
for an logging of the unauthorized entries
and finally a spike to see if
we are really vulnerable by storing customer details
in the JWT. And finally we go
into the did we do a good job? Step final
fifth step what are we going to do is we are going
to reflect ourselves on the outcomes of the exercise.
Feedback and continuous improvement is essential to
managing risk. Without feedback, we will never improvise
or do a better job. The key principle is
analyze. Analyzing the scope was the scope
too granular? Was it very big? Can we do anything about
it or should we not do anything? Analyze the tools
used what about the location and remote tools used?
Analyze the outcome is a thread discovered
where a rare find or just a stones should
we tweak the stride model? Should we tweak the examples
that is given to the stakeholders? Should we tween about it?
Should we work on it or not? That's a way depending
upon the outcomes of the exercise you tween and
make it better. The stakeholders. Here is security
teams and the engineers. Once the reflection
is over, we go through the cycle again
for every agile sprints or iterations,
which leads to iterative threat
modeling. How effective is iterative threat
modeling? The main hindering factor of running
a threat modeling exercise is the alignment between
stakeholders like security team,
business team and the development team. Each one
has their own perspective of security
in their mind and agile
threat modelling exercise aligns them
together is common security goal.
This workshop or this exercise should not run
more than 16 minutes. In this exercise
we align on the factor what is the final destination
that we are going to reach or
what we want to deliver. We align together on the
goal threats, prioritization and the
mitigation actions. Once everyone is aligned,
it is very easy to repeat and inject into our every
iteration. One of the agile rituals
is a backlog refining where we refine the stories
that are going to be delivered or picked up in the
next iteration. We can run the exercise
in the same session which should not take more than 15
minutes. By running this using the
simple steps in the backlog refining
for every iteration, we brings in the security
mindset to the development teams and make sure we deliver
secure products. Depending upon your team
position, you can run this exercise the way you want.
If your team sits next to you in the same physical
environment, you can run it face to face.
The steps is print the cue cards from this presentation,
gather everyone against the whiteboard and draw a high level dataflow
diagram on the board. Use stickies or sharpies to capture the threats
and mitigating save the artifacts digitally,
not physically. If the team is hybrid and
remote. Take an inspiration from the pdf attached and use
any whiteboard presentation in your organization to create the capture the
data flow diagram architecture diagram. In this template,
use stickies and capture the threats mitigation one important
point to running the workshop is be time conscious because
you can easily get into a rabbit hole. And if you
want to learn more about threat modeling, there are various
ways. One is an OASP slack
where there are more than 500 threat modelers actively
discussing about threat modeling and its future
and there is a community in Reddit you can
follow for public talks or examples or tools
or techniques. In thoughtworks there is a separate blog
for security which exclusively talks
about threats modeling and the devsecops information.
And finally there is a Martin Fowler blog which talks
about threats modeling for developers and the links are
in the respective blocks.
Now that we have gone through the iterative threat modeling for
development, let's take a step back and understand
how threat modeling is applicable in different stage of projects.
When a new project starts, we start with planning
stage. We run a business level threat modeling
at the requirement gathering stage followed
by a high level threat modeling and architectural design stage.
Once the planning requirement design happens,
we go into a build deploy testing code
phase before the deploy and release happens.
Build deploy testing in the build deploy testing code we
introduce the agile iterative threat modeling
exercise. So threat modeling
at different stages has different ways or different
outcomes. Business level is different from the
application threats modeling and delivery or design level
is different from iterative or agile threat modeling
here. So there are lot of mnemonics
in this talk. You might be a little bit confused about
what all things let's take a quick recap.
You don't need to be a security engineer or expert to run a
threat model. Threat modeling will identify
threats that you will never find in automation.
Threat modeling at any point can be introduced
in the software development lifecycle.
Extend your existing ways of working and ask what can go wrong?
Apply the stride model that is the most quick and flexible
way and use the
dread and security objectives
to prioritize the cards and always create
stories, tasks, acceptance criteria or spike
never are go outside the project development management
tools and don't worry, there is a lot of
people out there in the community to help you
support. Hope you enjoyed my talk.
Feel free to reach to me for any questions
related in my link using my LinkedIn profile.
Thank you for joining my talk.