Keynote - How Do You Actually Find Bugs?
https://www.youtube.com/watch?v=7Ysy6iA2sqA&ab_channel=OffensiveCon
- Temperament
- Curiosity
- Detail-oriented
- Ability to deal with failure and continual evidence that you’re wrong
- Learn how to deal with failure
- Two projects (can be unrealeted, or different parts of the same)
- Learn to recognize whe you have hit a wall and have become unproductive
- Switch to your secondary project
- Consider having a development project as your seconary project
- Do an achiveable, measurable task
- Regain a sense of achievement
- Two projects (can be unrealeted, or different parts of the same)
- Moving on - Knowning when to quit
- You will return it in the future
- Motivation - Remaining Enager
- The more you’re curious about how a technology works or how an algorithm achives its goal, the less monotonous code review is
- Motivation - bug patching
- bugs being patched is frustrating
- … but they are evidence that you were on the right track!
- bugs being patched is frustrating
- Confidence
- Research is a daunting filed to enter
- Some security reseacher you respect had the same self-doubt coming in, and have recurrences from time to time
- Growth mindset: “I can’t do that … Yet”
- Bias and assumptions
- Common code reviewer biases
- Everyone has looked at the already (many eyes make all bugs shallow)
- Even if I found something, it will be unexploitable (Server side)
- The X attack surface is not interesting now (eg, media parsing in browsers)
- There are no more bugs in this
- The protocol doesn’t allow you to do X
- Common code reviewer biases
- Auditing Process
- Understanding the code
- Documenting your findings
- Identifying bias
- Tooling
- Revisit the code base
- Analyze failures
- Attampt to understand the code
- A lot of people try to short-circuit this process
- Reliance on tools
- Fuzzers/static analyzers are a guide, not the whole process
- Many of today’s vulnerabilities are complex, and require in-depth understanding of the codebase
- The more you understand about how the program works, the better equipped you are to find bugs ( and exploit them)
- The best way to understand how something works is to explain to someone else
- A lot of people try to short-circuit this process
- What I’m looking for
- software risk = available attack surface * complexity
- attack surface can be indirect
- even mitigations are attack surface
- often you initial perception of attack surface is naive
- Hidden/non-obvious attack surfaces are the best
- Complexity is plentiful
- Feature driven (thanks w3c)
- Legacy support
- Often avoidable: the anomaly of cheap complexity
- Borrwoing ideas
- Bugtracker / Diffs
- Can show where a bug is
- Can inspire new ideas: variants, same bugs in other codebase
- Mean but viable: track commits by error-prone developers
- Comments in the codebase
- Descripbe things I’d never thought of
- Bugtracker / Diffs
- Document your findings
- Get into the habit of documenting
- ideas, bugs candidates, idiosyncrasies, data structure, algorithms
- Documenting failed ideas is as important as documenting successful ones
- avoids repeating thie idea sometime later
- Long term view: I’m going to revisit this later
- Get into the habit of documenting
- Revisit code bases and failed bugs
- code bases are not static
- coee rewritten
- Features added/changed
- Environment is not static
- code bases are not static
- Analyze your failures
- if someone succeeds where you didn’t, have a look at what they found
- Try to figure out: why did I miss it?
- Is this a one-off or teachable trick/blind spot
- Can you improve on that?
- Is there a pattern in those falures?
- Failures is an oppotunity to learn
Keynote - How Do You Actually Find Bugs?
https://usmacd.com/en/How_do_you_actually_find_bugs/