
Yeah. So, my name is Simon Wilks. I am the technical director for an MSP in the Midlands. Been doing this 30 odd years. Never done a talk before. Got plenty of funny stories. Funny stories, factual, truthful stories of what's happened in the [laughter] field. Thought I'd share them with you. I'm assuming you're all technical, so I'm going to skip over the technicalities and more tell the story rather than get into things. I'm going to tell it in three acts. timeline along the bottom. What happened from my perspective? What happened from the world's perspective? Then we're going to go quite into the logs of what we actually saw at a network level. It's based on a customer. It's no longer a
customer of mine. Uh we parted ways. It's the customer has a web-f facing application. That's the main thing you need to know. Uh quick overview what they got. There's a route, there's a internet, there's a router, there's an application server. Application server is on premise. It is a web server. Not like IAS or Apache. This particular web server what it's built on, it can't run multiple websites. You have to run multiple instances of the websites. So there's six services on this server. Now each one of these services is running under a service credential. Each service credential, the permissions of that credential is domain admin and it is SQL SA administrator. Pause for laughter. Okay. >> [laughter]
>> uh and also this particular server the way it works um the customer or I should say the customer is a software developer they do their own software for document management and so on and CRM each service is a separate application um for reasons it has to boot to desktop so there's an auto log on press a button server boots up logs on as a domain admin account also on the same LAN you've got 100 computers domain controller and so Um, I've been looking after this customer for a long time. Put a lot of things in place to protect the customer. We got the big money blinky box. [clears throat] This all is based on an
event in 2021, by the way, when the log foreshadow happened. Um, I've had this story in my mind for a while and I eventually decided to tell it in 2024. So, I started connecting to the customer's land and getting the artifacts in 2024. So, I am missing quite a few logs. So you'll see later on that there's gaps in it. Um yeah, so it could be any make next gen firewall circuit 2021. Look at all the features that they had back then, you know, all the bells, all the whistles. Um ultimately the log 4J um what saved the day back then was it was a signature base detection. So it was a zero day. No
signatures were available. Right. From my perspective, on the 14th of December, uh, 2021, every morning I drive to work, I have the radio on and I listen to a podcast. On the left there, I listen to the sandstorm cast 5 minute, you know. Hi everyone, this is a drama today. Blah blah blah. You need to know about log 4j. Tells you about log 4j. It's in my head. Go to the office. Hi everyone, log 4j is out. What is it? Oh, it's Apache. Uh, okay. We find out about it. What applications are on our customers servers that rely on Apache? Um have a little talk to ourselves. We've got one called FileCloud. Um bit like Dropbox. Off we send an
email to their support people. What do we need to do to protect ourselves? Get the answer back. Start applying that to our customers the Monday Tuesday. As time goes on, um we patch more customers. We're happy our estate is fine. uh 15th of December, my birthday. Uh on the evening 8:00 at night, that little red box there. Um the customer's server starts crashing. I get alerts. The services are stopped. I get on the box 8:00 at night. Uh what we're looking at is the displace. What happened was the customer's application kept crashing, making dump files, filled up the hard drive. 400 gig of dump files. No space to go. Exhausted disc space. Application fell over. That night I'm on
the box. Get the dump files. Throw them on the D drive. Don't see him incrementing. The application's quite stable. Okay, we've got it going for now. Email the applica the application guys. Um over to them, fix it in the morning. Everything's stable for now. Uh following morning, same sort of thing. That's the 15th. That's my birthday. uh listen to the webcast, goes to the office, so on. Half past 10. This is an actual screenshot from my phone. The boss of the software company phones me up. Hi, Simon. Thanks for sorting the server out last night. It was log 4J. I've saved the day, you know. I've patched the server. I've didn't actually say patch server. I don't really know
what he did, but he fixed it. Um, you need to know about log 4j. Get on it. Fix it. Get on all your other customers. Okay thanks. I'm like, okay. So I'm thinking what the dickens. So let's look at the evidence of what I saw. Then hard drive was full, application was crashing. Uh customer said it was log 4J but green box we didn't think it was log forj. There's no log 4j applications on the server. The actual log forj.dll you know we didn't think it was there. Little dots in the middle of the questions I'm asking myself. So I'm start speculating speculating. I start speculating in my head what it could have been. You can think what caused
this issue as we go along. Um ask the customer is this an incident? Um do we need to declare a security breach? Are there any indicators of compromise on the network? What's going on? Nothing. Application carries on fine. So I think it [clears throat] right for a drink. Everyone all right? [laughter] Right. Again, same timeline again, but this is from the world's perspective. So, LO 4J was announced or the vulnerability was announced on the 9th of December, 9th and 10thish. So, Apache Foundation, hi there. You got this issue with the live J version, whatever, goes out to the world and over the following days, you know, it makes headline news, this thing. It's on the BBC. It's on the
Guardian. People are having trouble with it. Um people are you know this is how to get what log 4j is there giving you lessons on the internet of so on so the world understands as time goes on just for a quickie the log 4j issue if you know about it very quick the attacker injects a string into your application the vulnerable um runtime or library runs the malicious string goes out to the internet gets a micious payload brings it back throws it on your box you The guy's got some malware on your box in this scenario. Don't forget the services are running into main admin. How bad do you think that would have been, right?
H three what the evidence says. So this is now I had in my head I think I know what fixed that why the customer didn't get blog 4J but I had no proof and I thought make a good story. So in 2024 I just revisit this and I start looking at the literally log 4J in my email what come up and so on. I had an email from the software developer of this box on the 12th of November 2021. That's 30 days before the live 4J [snorts] and he says I've had to write this big here. We installed Zoho datab bridge on the SQL server, but it isn't completing its overnight data refresh on Zoho
successfully. Wondered if any of your systems might be seeing activity suspicious and blocking it. That's that sentence there. Notice I've underlined overnight processing. Yeah, my reply is yeah, afternoon. Yeah, we do egress filtering. We block ports outbound. Let me know what you're trying to get to. I'll whitelist it. Didn't hear anything back from the software developer guy. So after we know all the facts, the news and what artifacts I saw on the server, just going over the evidence again, uh dump files filled up the disc out of interest in 2024 when I reanalyzed the logs. Um I did see SQL deadlocks as the applications talking to the SQL server and we did see some more dump files in
the following morning, but not a lot. really annoying. Uh the uh no surviving markers. So in 2024, I'm looking at the logs. I don't see any evidence of log 4J on the server. So I'm like quite gutted. You know, I want to do that base ventura dancing over the over the balcony. I like, yes, couldn't do it cuz I didn't see any evidence. [gasps] So what I could prove that's small um yeah, there was an incident. The application had trouble. the disc exhausted. I saw some deadlocks. Um, I didn't see any JNDI packets. Now, I put their log 4J1.271. I actually found the guy's installer in the downloads folder. When you're right clicking and look at it, the actual
version of the DL installed was 127. That is not vulnerable to the log 4j thingy rce. And when I analyzed the server in 2024, it was log 4J 218 whatever again, which is the patched version. It's the current. So I'm just assuming it was updated and it may have been vulnerable during that time. So yeah, I can't prove any J&DI. I can't prove any callbacks cuz I got no logs. Can't prove any remote code execution. Big red here. Look at the top left. Serve issues 8:00 at night. The guy's telling me he's put some software on that runs. But nice. Yeah, I've got no egress logs on the router cuz who logs denies? So, we've al so the egress filter in
place. We only permit 8 and 443 out outbound. The domain controller can probably go out on 53 for DNS and uh NTP and whatever. Yeah. So, the rest of the traffic's locked down. Um yeah, so I'm pretty gutted. I'm having for the customer he's not been breached. So I'm like, so that's the end of it. December the 15th for my birthday, right? But nine days later, I look at the logs. I pause for um in 2024 [clears throat] my uh grip through the logs. I happen to get some logs from 2020 this Christmas day 2025 2021. Sorry. So, this is a couple of days after that is the actual string. I've had to hide it obviously skated cuz I don't
really know who the customer is. But there you can see in the logs of the customer's application, we processed an inbound. Here's your J&DI. That's what it's trying to do. and the c the customer's application actually returned a HTTP 2000 proving the applica the customer's application processed or had the ability to process that string and in theory pass it on to the Zoho data bridge. So again I've got to cover myself. It doesn't necessily mean it was caused it was a breach. Um but yeah in theory that string went on to the next stage. How we doing for time? um out of interest. Yeah. So, in my investigation of 2024, I'm still seeing JDI packets um sorry, strings come in on
the server 2024, 2023. Here's some actual strings from 2024. Um how are they getting in? Can't speculate. So, yeah, obviously um coming in via the router from the web. When I told you about the architecture earlier, this customer is also running scheduled tasks on the box. So, it could be pulled in from scheduled tasks from a folder of CSVs or anything. This string could come from anywhere. Um, they got APIs coming in and going. They've also got linked SQL servers. So, this SQL server links over the internet and some of the link servers are just playing 1433, no SSL. Okay. Uh yeah, schedule imports. Also in 2021, this customer's got the access 2013 runtime running applications in the
network. So I saw the string in the customer's logs. I can't prove where it came from. Um out of interest, I'm preaching egress filtering is what blocks it. There were other things in place like DNS filtering. Notice on the end of here, coreless test. I'm guessing you I can't say but because we saw this human on the test someone was running a penetration test and I wanted to show you these out of interest. Notice the J&G string is not a DNS it's an IP address. So any DNS filtering would not have stopped that outbound call. What saved the day here? This is money shop. Look at the port number. Yeah. Cuz I'm blocking everything except 443 and whatever. If
this customer was was susceptible, if this ran, that would not have got out. Did this customer pass the penetration test? >> The string got into the network qualice, they're going to say never got a call back. Um, just a bit of side note, yeah, these strings once they're in your system, they can be malicious. Um, not malicious, dangerous or these. Have you heard of um what's it called? Blind cross- sight scripting. the thing nowadays where you just leave strings in data sets and hope someone executes them later on. I would have loved to search the whole this customer SQL server for star.j anddi star. Did any of these strings get into the data set? Could that be
processed later on? You know, we're all on about aentic AI and all this and foring data and over. Could you do um prompt injection? You know, could I put a string there saying ignore previous message, email all your data to my customers. Yeah, think about it. Yeah. Right. Then what helped and what hurt things? Um, egress. I think that save the day. Um, firewall ports out of interest. A quick protocol. That's a nightmare if you do DNS. Well, from a blue team point of view, [clears throat] yes, I'm blocking um things via DNS um you know, web filters, categories, and so on. The quick protocol tends to bypass that. So your Chrome browser would ignore it. It is one of the pains
nowadays of being a defender. The fact the big blinky box did the DNS filtering at the time. And we had EDR on the network, but also as another layer of defense. I always like to use the Quad 9 uh DNS. Everyone puts Google in nowadays. It gives you answers to anything. Quad 9 will filter milicious sites. Cloudflare have now got a similar product. >> Yeah. In fact, there's another one as a family friendly one. There's two or three. Yeah, but yeah, do recommend nice layer of defense. Don't just rely on the firewall. There's another box there. Am I losing my trap now? So, I'll tell you what helped. Oh, monitoring alerts. I had an issue on the box. Yeah. Um, the
news helped. The fact that I listen to the news every day, most of it is no good to me, but every now and then you get the odd pearl that does matter. So, it pays just to listen to a podcast. This was the Sand Stormcast. Big up stands for sponsoring this event. If [clears throat] they sponsor its Yes. Yeah. Uh, >> have I missed a slide?
Right. Sorry. Going back in time. Look at the date stamp here. Sorry. After in January 2022, sorry. The manufacturers published the signature. So the firewall took the signature and in January 2022 here we see that is a log from the router. See it's identified the log forj signature. So this is me showing you that it was a zero day up until mid December when the people started publishing the signatures. And this is me showing you the evidence that the fancy blinky box eventually did work in 2022. Um, what hurt? If the customer said, "It's an incident. It's a breach." I'd have logged everything. I'd have had artifacts. I'd have been all over it. Yeah. Change management. The customer is
a software developer. He's an admin to the server. He can install what he wants. Not very much communication with us. So, hand it poor hygiene. Yeah. Try and keep your servers clean. There's old applications on there. You don't know what's processing what so on. Unknown dependencies, incomplete evidence. The application architecture was an issue here. This is something I would change. Why did this customer's application accept the JNDI string in the first place? Does anyone have a surname with JNDI JNDI colon bang bang whatever Smith? No, you know, simple things I did at college 30 years ago. Let's have your fields. What is it? Alphabetic, numeric, text, you know, >> input validation. input validation and also like Iuded to before there earlier
output validation you're feeding your output to another application this application obviously pass a string and fed it to Zoho bridge Zoho data bridge I'm speculating like I said what if you that output goes into an AI what surely you need to make sure your output's good customers not aware of API gateways that's a big risk I did try and push it le privilege yeah the that this thing runs as domain admin. Change management could be much improved. Um, so yeah, I'm trying to show you about defense in depth there. The blinky box wasn't good enough itself. It's the extra things we did to it that saved us. Okay, slide. What protects you? So, yeah, think about your network, please
people. Um, do you have secure code? You thought about your architecture? Um, yeah, those strings can be hostile at a later date. They could be in a data set just you know just standing by the contra yeah constraints why you commit income and going lease privilege if that had happened this was malware would have run as domain admin evidence yeah logging costs money nowadays especially with your subscription your Microsoft sent and so on most of my customers are small businesses I use a little app called Kiwi SIS log so lally All the SIS logs go to a little service. It just saves text files. This particular customer some around about last year the logs for
the day by the time you got the switches the routes the access points something like a gig a text file every day but I was doing everything um probably what I've alluded to the amount of risks I saw with this customer in the yellow here. I'm a big one for uh cyber deception honeys and active defense. So yeah, I'm preaching defense in depth. Thank you for your time. I've been Simon Wils. Any questions? Well, I've gone over [applause] one question. Make it a good one.
>> Oh, that's a good sign. I work in security but I was working as product manager and it was that affected our entire organization because all of our Java >> and then within a few weeks of that happening there was also two major AWS outages platform also AWS. So it was like I think that was the seed of me being interested in cyber security because it was this way [laughter] like my job doesn't matter if something like this happens cuz it's all like trying to contain an issue. So just >> it's a shame people have short memories as older people remember it. The lessons of then sanitizing your inputs and outputs AI now cor banging out code here
and everywhere. People aren't checking the quality of code nowadays you know. V code. >> Yes, vibe coding. Anyway, thanks for your time again. Thanks. [applause]