Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
What I've Learned Writing CTF Challenges
Search
vito
February 11, 2017
Programming
0
160
What I've Learned Writing CTF Challenges
BSides Tampa, 2/11/2017
vito
February 11, 2017
Tweet
Share
More Decks by vito
See All by vito
Modernizing SQL Injection CTF Challenges
vito
0
180
Raw Water: Quenching Your Thirst for SQL Injection
vito
0
83
Lessons Learned from Five Years of Building Capture the Flag
vito
0
500
Capture the Flag: An Owner's Manual
vito
0
99
Building DEF CON CTF with Ruby
vito
0
600
Other Decks in Programming
See All in Programming
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
3k
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.2k
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
開発に寄りそう自動テストの実現
goyoki
2
1.1k
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
260
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
1
250
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
130
sbt 2
xuwei_k
0
300
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.2k
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
510
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
GitHub's CSS Performance
jonrohan
1032
470k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Building Applications with DynamoDB
mza
96
6.8k
Transcript
What I’ve Learned Writing CTF Challenges Vito Genovese BSides Tampa
February 11, 2017
What is CTF?
What is CTF?
Jeopardy Style
Attack-Defense
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
CGC Jargon • Cyber Reasoning System • Proof of Vulnerability
• Replacement Binary • Challenge Binary
BSTies http://bsties.notmalware.ru
CTF Challenges Teams attack it
CTF Challenges Protects something of in-game value
CTF Challenges Ideally: known solvable
CTF Challenges Also ideally: appropriately tricky
None
None
Solving 'em • Correct side of an if statement •
Cracking a code • Using SQL injection to trick a database • Stealing the garbage file from the Gibson
Actually Building One
None
Original Goal
Original Goal
• Given same STDIN • Same STDOUT • Same clock
cycles • Same syscalls
https://xkcd.com/1319/
Why Automate?
None
Thousand Cuts
Thousand Cuts
Thousand Cuts
Actually Building It
Start the First One 1. Set up CGC service-template 2.
Test not-crashing 3. Make binary that doesn’t crash 4. Test crashing 5. Make binary that crashes
First One's Done • Ruby script to spit out 334
binaries • Vary buffer sizes • Vary stack cookie • Python script running game flow
First Set's Done Figure out how to make second and
third sets
Second Set Python script to add stuff to source code
Third Set Python script to rearrange source code
All Sets Done Test the difficulty
Integration Testing With Gyno • Finds a bug in like
30s • Fixing the bug took 30m • (fixing the bug a week prior would've taken 5m)
More Integration Testing kind of weird
easy-prasky • single binary • Baby’s First category • Separate
CRS work from first stab at CGCEF • Hacked to be first in 334 cuts
Deployment • Determine ops requirements • CGC kernel • Python
installed • Open port
Deployment Puppetize it!
Deployment
Running it just kinda worked (once teams Got It)
CTF Challenge Process 1.Idea 2.Build 3.Test
CTF Challenge Framework • Configuration • Build • Testing •
Deployment
CTF Challenge Framework CGC service-template
CTF Challenge Deployment put it on a server lol
It's Just Software
Software Goals Useful Usable Reliable
Useful for Competition Separate teams that solve it from teams
that don't Prefer strong correlation with finals ranking
Useful for Education Teach new players something Get players over
a hang-up
Usable Intended difficulty only Minimize corner cases Unintended vulnerabilities?
Reliable Remain vulnerable
Reliability is Hard Players like to attack Players like to
brute Players like to complain
Reliability is Hard
Reliability is Demanding
Reliability is Expensive If you want it to be
Reliability is Cheap Build software that can be run reliably
Twelve Factor App • VIII. Concurrency • Scale out via
the process model • IX. Disposability • Maximize robustness with fast startup and graceful shutdown
Twelve Factor Challenges • Limit global state • Process per
connection • xinetd ftw • Make adding resources cheap
Adding Resources Automate!
Operations Automation Puppet or Chef for server provisioning
Operations Automation Docker is slow to spin up RunC is
fast
Shared State • Process per connection not always feasible •
Sandwich challenges in 2014 • JRuby & Celluloid slow to start • State still per connection
Shared State • Global state and web challenges • Persisted
XSS • Tricking a global database
Waiting For Your Touch • 2015 web challenge • /r/thebutton
knockoff • JRuby, Rails, websockets, postgres
Waiting For Your Touch
Waiting For The Challenge Slow when not slow 500s Thankfully
during the day
Waiting For Your Touch 1. Took it down 2. Opened
replacement challenge 3. Debugged for an hour
Debugging For Your Touch 4. Leaked and exhausted postgres connections
5. Fixed leak 6. Allocated more connections
Waiting For My Fix 7. Took an hour 8. Gyno
forced a fifteen minute cool-down between "is it fixed" and "it is fixed" 9. Reopened
Most Important Part People are the most important
Respect People • Respect for yourself • Respect for your
team • Respect for players
Respect for Yourself
Respect for Your Team
Respect for Your Team
Respect for Your team Make services easy to keep running
Document!
Respect for Your Team Provide easy to run smoke tests
"Is this exploitable?" should be a one-liner that spits out the flag
Respect for Players
Respect for Players
Respect for Players
Respect for Players
Building Challenges is Software Development Useful Usable Reliable
Reliability Imposes Constraints Limit state Limit dependencies Automate
Respect Is Fundamental Self Team Players
Thanks! Vito Genovese
[email protected]
@vito_lbs GPG B07D616143CAA77B https://legitbs.net @legitbs_ctf