Live data from Hacker News

Stripe-CTF 3 Writeup

muehe.org

51–60 of 74 posts

Re: Stripe-CTF 3 Writeup

#51
post #46

Very fair feedback on moving the deadline. We'd debated doing it or not, and ended up moving it in the spirit of distributed systems education. A lot of people in the chat appreciated it, but that's obviously a selected segment. So we know for next time, how strong are other people's feelings on this?

I think the write up is pretty good at stating the problems (along with the deadline). If none of the other problems existed there wouldn't be a reason to extend the deadline. I agree with the choice to extend the deadline due to load/bugs but a fixed revised deadline would have been nice. Also, maybe limiting the number of successful trials a person could perform in total would have helped with scoring.

That being said, I think you guys picked a hard CTF concept this time but I LOVED PLAYING. Thank you Greg and everyone else at Stripe that contributed!

Re: Stripe-CTF 3 Writeup

#52
I've got mixed feelings this time.

Disclaimer out of the way: No sense of entitlement here, every time I see a challenge like this I expect to fail. I'm really, really happy that people (Stripe, here) offer their time and resources to entertain us.

I'm a proud owner of the CTF2 shirt.

This time I couldn't finish level4. My takeaway is: I invested too much time and shouldn't have done it. I guess I'll pass next time when a challenge w/ a deadline starts.

Level0 was a nice warm-up.

Level1 was immensely satisfying and interesting, but the pvp challenge was .. well.. dead. By the time real life let me join others were throwing GPU based miners at the problem and traffic was constantly heavy anyway. So amazing level, the arena type thing was imho not a good idea.

Level2: Here the problems began. Local tests and remote tests diverged, plus this level was pushing you to use node.js. Will come back to this later. The actual challenge was interesting, so my issues here were infrastructure and .. language

Level3: This was absurd. Again, the challenge sounded interesting. The sample solution you're supposed to fix came in Scala and you had some constraints (time/memory). I had a couple of (locally) working solutions that never made it remotely. After hours and hours I gave up and solved this challenge - by executing grep for each request. Yes, I called grep and parsed the output, didn't index a thing. That felt .. bad.

Level4: Didn't solve it. Utterly frustrating. The consensus (hah.. hah.. get it?) seemed to be that raft (goraft) would be the way to go, but I invested again hours (8? Probably a lot more) and didn't make it. Problems with the deployment were mentioned on the channel again and again, goraft has even open pull requests and recent tickets from the stripe guys, as far as I can tell. Dependencies were a mess. Someone built the reference solution to this level and found bugs in goraft (see Github, goraft issues)? I .. don't think this was a good idea. Plus, forcing unix-sockets into the game (where everything around it doesn't support those and hey - if you want to have a 'curl for unix sockets' you end up finding another go project that just didn't work for me) was really messy.

So, putting aside the fact that I wasn't smart enough to clear level4 (it was obviously possible!): The templates came in nodejs/Scala/go. I knew a little about nodejs, nothing about the other two. Ripping the provided framework out was kinda possible, but a pain in the ass to debug (you could run a script that installed stuff remotely - I tried solving level3 in Clojure and it was a miserable experience). So challenging tasks plus new languages, plus deadline, plus 'servers are overloaded and cannot answer': This was just way too much for me. I still tried to solve level4 until the server fell over again and the CTF was finally closed.

My take away: All the ideas, the problems, were cool and interesting. But I guess even the Stripe guys were surprised to see the load/spikes/outages - probably a consequence of the 'distributed'/'load handling' type of problems, versus the 'try to break in' challenges last time. It hooked me with the leaderboard, nice website, good problems. But it was an exercise in frustration for me (and Scala/Go are _really_ not for me..).

That aside: Thanks a lot, Stripe. I cannot even begin to imagine how much work you guys invested in the preparation and administration/maintenance. I do consider the extension fair - and didn't gain a thing from that (was already at l4 at that point).

Re: Stripe-CTF 3 Writeup

#53

I've got mixed feelings this time. Disclaimer out of the way: No sense of entitlement here, every time I see a challenge like this I expect to fail. I'm really, really happy that people (Stripe, here) offer their time and resources to entertain us. I'm a proud owner of the CTF2 shirt. This time I couldn't finish level4. My takeaway is: I invested too much time and shouldn't have done it. I guess I'll pass next time w…

This is good feedback. Honest feedback like this helps us really understand how successful we're being with CTF.

One of our design goals was to make it hard to have something that worked locally but not remotely. It seems like we didn't quite make it, and that caused a lot of frustration. Sorry for that — it gives us something to work towards next time. In any case, I hope you walked away knowing some things you didn't before :).

If anyone else has feedback, I'd love to hear — feel free to ping me at gdb@stripe.com.

Re: Stripe-CTF 3 Writeup

#54

Here are my thoughts: I managed to scrape through level 4 so saw them all - this CTF was fun and educational. Level 4 in particular felt like a real education (for me at least), and a great way to learn. Unlike many others I was fond of level 0 because it brought up questions that even beginner programmers should address - how to organise your data so that you can search through it easily, which was in some ways a pr…

The reason the build times on level 3 were so bad was due to time spent downloading libraries. Stripe seems to have set things up to use a different ivy cache for each user, so every time you deployed code it had to redownload all of the dependencies. For me, this tended to take a couple of minutes. Actually compiling the Scala was pretty fast (So yes, Scala is generally slow to compile, but don't blame scalac for this one :).

Personally, I didn't quite manage to finish 4. I had a working solution locally, but didn't have the hours to debug why their remote environment differed so much from my local environment. My submissions also failed randomly about 4/5 times as the deadline got closer, presumably due to overload on their servers. And the unix domain sockets indeed felt unnecessary; I probably spent more than an hour just dealing with issues related to that.

The format (particularly on 3 and 4) of being given pretty broken code also sort of messed with my normal approach to code reading, which assumes that the code is more or less ok. This was particularly problematic for me on 4, since I had never before used Go and had a harder time figuring out what was wrong and what was just Go weirdness.

All around, though, I had a pretty fun time. Even if it did suck up way more time this week than I intended.

Note to Stripe: I would gladly pay $10 next time around if it could buy more/better ec2 instances.

Re: Stripe-CTF 3 Writeup

#55

Here are my thoughts: I managed to scrape through level 4 so saw them all - this CTF was fun and educational. Level 4 in particular felt like a real education (for me at least), and a great way to learn. Unlike many others I was fond of level 0 because it brought up questions that even beginner programmers should address - how to organise your data so that you can search through it easily, which was in some ways a pr…

> Explicit language independence for all the problems would be great.

I disagree, because the real world isn't all specs and cleanly defined APIs everywhere in the stack, and it definitely isn't mono-lingual. Oh sure, Stripe's actually pretty good with their public API, but I'm sure their stack has a few warts in different languages they'd like to rewrite.

Not knowing Ruby, or Scala, or Go, I had great fun getting into them for this CTF.

Re: Stripe-CTF 3 Writeup

#56

Earlier quoted context omitted.

Mind posting your code for level3? I got that partitioning was the main trick but I am too unfamiliar with scala to reassemble the responses properly.

Here is how I merged the responses: https://gist.github.com/mattnworb/8717911

Or a bit cleaner using lift-json: https://gist.github.com/mwylde/8724700.

Re: Stripe-CTF 3 Writeup

#57
I'm glad I participated in this challenge. It was fun to micro-optimize stuff, and I'm really happy to have been introduced to Go. The last level was a challenge, mostly due to Unix sockets and Goraft bugs and lack of documentation, but I enjoyed the language enough that I went back and redid level3 in Go, taking a top-30 score right at the buzzer. (Or where the buzzer would have been had they ended on time, which they should have.)

My family doesn't appreciate my long hours at the computer, and I haven't caught up on sleep yet, but I'll definitely do this again.

Re: Stripe-CTF 3 Writeup

#58

I've got mixed feelings this time. Disclaimer out of the way: No sense of entitlement here, every time I see a challenge like this I expect to fail. I'm really, really happy that people (Stripe, here) offer their time and resources to entertain us. I'm a proud owner of the CTF2 shirt. This time I couldn't finish level4. My takeaway is: I invested too much time and shouldn't have done it. I guess I'll pass next time w…

Level1 was immensely satisfying and interesting, but the pvp challenge was .. well.. dead. By the time real life let me join others were throwing GPU based miners at the problem and traffic was constantly heavy anyway. So amazing level, the arena type thing was imho not a good idea.

PvP challange dead .. but heavy traffic? Sounds like a contradiction. I think it's a flawed deduction that the arena was a bad idea because it took more than a casual glance at the challange to be competetive. For me, level 1 was definitely the highlight of the CTF. I was one of the few who wrote a GPU miner, and the constant competition of improving my miner vs. the other active participators was extremely exciting.

Re: Stripe-CTF 3 Writeup

#59
post #46

Very fair feedback on moving the deadline. We'd debated doing it or not, and ended up moving it in the spirit of distributed systems education. A lot of people in the chat appreciated it, but that's obviously a selected segment. So we know for next time, how strong are other people's feelings on this?

Personally, I would have been happier if the deadline sat -- if only because I needed to get back to regular life, and it's hard to resist the temptation to squeeze out those last few points.

But I might have felt differently if I hadn't finished...

Re: Stripe-CTF 3 Writeup

#60
I definitely learned a lot. I was able to pass all levels but unfortunately didn't have enough time to optimize them, even though I would have loved to. Thank you Stripe for putting this on! Looking forward to the next one!
Post reply on HN