Episode 535: Dan Lorenc on Provide Chain Assaults : Device Engineering Radio

Dan Lorenc, CEO of Chainguard, a tool provide chain safety corporate, joins SE Radio editor Robert Blumen to discuss tool provide chain assaults. They begin with a assessment of tool provide chain fundamentals; how outputs grow to be inputs of any person else’s provide chain; ways for attacking the availability chain, together with compromising the compilers, injecting code into installers, dependency confusion, and typo squatting. In addition they believe Ken Thompson’s paper on injecting a backdoor into the C compiler. The episode then considers some well known provide chain assaults: researcher Alex Birsan’s dependency confusion assault; the log4shell assault at the Java Digital Gadget; the pervasiveness of compilers and interpreters the place you don’t be expecting them; the SolarWinds assault on a community safety product; and CodeCov compromising the installer with code to insert exfiltration of setting variables into the installer. The dialog ends with some classes realized, together with how to give protection to your provide chain and the problem of dependencies with trendy languages.

Transcript delivered to you through IEEE Device mag.
This transcript used to be mechanically generated. To signify enhancements within the textual content, please touch content [email protected] and come with the episode quantity and URL.

Robert Blumen 00:00:17 For Device Engineering Radio, that is Robert Blumen. Nowadays I’ve with me Dan Lorenc. Dan is the founder and CEO of Chainguard, a startup within the tool provide chain safety house. Previous to founding Chainguard, Dan used to be a tool engineer at Google, Speak about, and Microsoft. Dan, welcome to Device Engineering Radio.

Dan Lorenc 00:00:42 Thank you for having me.

Robert Blumen 00:00:43 Nowadays, Dan and I will be able to be discussing assaults at the tool provide chain. Now we have any other content material on this house, quantity 498 on CD, 338 on Jenkins, and a number of other others on CD that you’ll be able to see within the display notes. This episode might be all gloom and doom, however don’t depression, we can submit any other one later this 12 months about securing the tool provide chain. There’s such a lot right here to discuss. I sought after to do a whole episode on assaults. Dan, prior to we get began, is there anything you’d like listeners to learn about your background that I didn’t duvet?

Dan Lorenc 00:01:25 No, that used to be a sexy just right abstract.

Robert Blumen 00:01:27 K. Now we have lined this prior to, however let’s do a temporary assessment. After we’re speaking about tool provide chain, what are the principle items?

Dan Lorenc 00:01:37 Yeah, so tool provide chain is similar to a bodily one. It’s all of the different firms, folks, people, communities liable for taking all the dependencies and different techniques that you simply use to construct your tool; getting the ones to you, holding them up to the moment, holding them safe and letting you utilize them at some stage in your construction of your tool. After which the downstream aspect of that as smartly. We’re all on this large tool provide chain in combination. No person is development code on an island. No person’s development code through themselves. So the general public running on tool are someplace in the midst of that chain. So your entire shoppers, all of the ones folks taking and the usage of your tool of their each day existence. That’s how I call to mind the tool provide chain.

Robert Blumen 00:02:16 If I perceive, then there are portions that you simply run, like in all probability a construct server. There are dependencies that you simply pull in after which in case you submit tool or an API, you grow to be a part of the availability chain for folks. Did I am getting that proper?

Dan Lorenc 00:02:31 Yep. Yeah, that’s an ideal abstract.

Robert Blumen 00:02:33 What’s the assault floor of the availability chain?

Dan Lorenc 00:02:37 It’s large, proper? So it’s all the ones teams, all the ones techniques, all the ones firms, all the ones construct servers, all the ones organizations interested by getting you your code that you simply use, getting you your dependencies and your libraries and your services and products. Any one among them will also be attacked. So the assault floor is de facto large.

Robert Blumen 00:02:53 As I’ve been studying about this, it sort of feels that sure issues generally tend to get discussed so much, one among them being Jenkins and any other one being NPM. Am I making moderately of a biased or disproportionate studying with the literature, or are the ones truly the issues that persons are attacking probably the most?

Dan Lorenc 00:03:15 No, I believe you spot that within the information probably the most as a result of they’re probably the most well-liked and maximum ubiquitous techniques. They’re in numerous spots within the tool existence cycle and the tool provide chain utterly, however they’re each extremely not unusual and also you’ll in finding them just about any group growing tool in the market these days. Jenkins is an automation server this is recurrently used for CI/CD duties. So that you click on a button, it exams out your code runs, exams, builds it, publishes it, that roughly factor. NPM is a package deal supervisor for JavaScript, and it’s roughly used for each NodeJS and front-end JavaScript, that folks do on web pages. So although you might have as an organization you’re doing Java or Pass or any other form of backend, you virtually all the time have some entrance finish website online someplace. So that you’ve were given JavaScript although you don’t use that as your backend language. In order that’s why NPM is likely one of the most generally used and maximum not unusual open-source package deal managers. So on account of that, I believe that’s why we see those two in lots of the headlines.

Robert Blumen 00:04:07 I discovered a file from Sonatype known as “state of the tool provide chain.” Consistent with this file, tool provide chain assaults have greater 650% and are having a critical affect on industry operations. Some assaults reportedly have brought about billions of greenbacks of wear. Why have attackers became their consideration to the availability chain lately?

Dan Lorenc 00:04:32 Yeah, I believe there’s no transparent recurrently approved solution right here. I’ve my puppy idea and a few people have shared it, however those aren’t new, proper? Sonotype is choosing up those tendencies and the tendencies are new, however tool provide chain assaults aren’t very new. They move all of the as far back as the early eighties, in truth. The primary one who I discovered used to be from Ken Thompson’s well-known paper “Reflections on Trusting Consider,” which we will be able to speak about extra later if you need. However we’ve recognized about those for happening 40 years, however what we’re seeing is attackers in truth focused on them. The most efficient solution I’ve heard for why now’s a mixture of a couple of components, however the largest one is that we’ve after all simply gotten just right sufficient at locking down and making use of elementary safety hygiene in all places else. Attackers are lazy on goal. They take one of the best ways in after they wish to goal a company.

Dan Lorenc 00:05:16 Provide chain assaults haven’t gotten a lot more uncomplicated. They’ve gotten somewhat bit more uncomplicated simply in with the upward thrust of open supply and the extra interconnected internet of services and products that we’re the usage of these days, however no longer markedly be more uncomplicated, however they’ve grow to be a lot more uncomplicated compared to all the different strategies. We’re after all the usage of SSL in all places around the web. When you glance again 5 or 10 years, we weren’t slightly at that point of ubiquity. MFA is after all nonetheless commencing even if it’s been sluggish and moderately debatable in some circles. Robust password hygiene, all of this stuff was once a lot more uncomplicated tactics to assault with elementary fishing campaigns. However as we’ve gotten just right sufficient at fighting those different strategies of intrusion, the availability chain turns into extra horny slightly.

Robert Blumen 00:05:55 Is it imaginable to generalize what are the intentions of the attackers, or is provide chain merely a style of assault and the standard causes won’t have modified?

Dan Lorenc 00:06:08 Yeah, I don’t suppose there’s anything else new in regards to the motivations right here. We’re seeing all of the similar standard suspects forming provide chain assaults: country states, cryptocurrency, mining, ransomware, all the above.

Robert Blumen 00:06:22 How are provide chain assaults detected?

Dan Lorenc 00:06:25 The attention-grabbing phase about provide chain assaults is that there’s nobody form of assault. It’s an entire bunch of issues, like we mentioned. It’s an entire bunch of various assault issues since the assault floor is so huge, so all of the assaults glance very other. When you glance again simply during the last couple of years, the 2 most famed examples that were given probably the most headlines have been on the assault on SolarWinds, that corporate again on the finish of 2020 during which their construct machine used to be compromised. The second used to be clearly Log4Shell or Log4J on the finish of the next 12 months and those two have been, they’re each labeled as provide chain assaults. Other folks stay announcing we wish to toughen provide chain safety to forestall problems like those, however while you in truth zoom in, they’re utterly other.

Dan Lorenc 00:07:03 It’s no longer even truly honest to categorize Log4Shell an assault. It used to be only a malicious program that used to be left sitting round in a extensively used code base for a decade that no person knew used to be there. When it used to be discovered, then attackers attempted to escalate it; the malicious program itself wasn’t any roughly assault. So yeah, I don’t suppose there’s a very simple solution for solving those or detecting them. They’re all very other. So the fundamental patterns of intrusion detection are issues that you’d use to hit upon one thing like SolarWinds, the assault they confronted, the place with Log4Shell, it’s about asset stock, static code research, S-bombs figuring out of what code you’re operating so you’ll be able to follow upgrades quicker. So that they’re all very other.

Robert Blumen 00:07:40 In studying about this house, many of those assaults have been found out in some instances years after the intruder had penetrated the community. Do you suppose that’s function of provide chain assaults, or that might similarly smartly be mentioned of all of the different assaults that exist on networks?

Dan Lorenc 00:08:01 I believe it is dependent. I believe numerous the assaults that we’ve observed and gotten detected, just like the Solarwinds one, for instance, it wasn’t detected till after the exploit used to be precipitated. This used to be roughly a work of malware that used to be sensible sufficient to sit down round and look forward to some time prior to doing anything else. In order that made it exhausting to hit upon till it in truth began misbehaving. If it hadn’t had that timer inbuilt, it could’ve been detected so much faster. Assaults like — leaping again not to truly an assault, quote-unquote — just like the Log4Shell instance, that malicious program used to be provide for a decade, after which abruptly as soon as it used to be discovered, researchers went and located an entire bunch of identical ones close by which brought about the repair rollouts to be somewhat bit slower. So it’s imaginable someone knew in regards to the exploit previous and simply didn’t use it or didn’t conceal it or didn’t proportion it, so it remained hidden. So yeah, I don’t suppose there’s anything else remarkably other about provide chain assaults generally, however there are specific ones that may lurk round for lots longer.

Robert Blumen 00:08:53 You discussed SolarWinds, Log4Shell. I do wish to come again in a bit of to discuss one of the crucial extra well known assaults. I wish to communicate in brief about one of the crucial ways which are used. As you identified, provide chain isn’t a method, it’s part of the machine that may be attacked many alternative tactics. I’ve an inventory right here of about 10 or 12, however possibly it’s good to get started along with your record. What are one of the crucial most sensible ways or assault vectors which are used to assault the availability chain?

Dan Lorenc 00:09:27 Yeah, one of the best ways I really like to border that is through having a look on the steps in a provide chain as a result of they’re all attacked and so they’re all attacked beautiful recurrently. You get started out in case you pay attention that vintage like “shift left” philosophy. So if we commence out left, the place left is builders, builders get attacked, person ones; they’re outdoor of your corporate running on open-source applications or inside your corporate. That’s an entire any other attitude referred to as like insider threats. But when builders’ passwords get compromised or their laptops get stolen and so they occur to be maintainers of a big challenge on, say, PiPi or NPM, now malicious code can get uploaded there, and we see stuff like that occur very recurrently and that’s why registries like PiPi from the Python Device Basis and NPM. However you recognize, now they’re rolling out necessary multifactor authentication to assist give protection to in opposition to the ones threats as a result of we do see them, whether or not it’s phishing or focused assaults.

Robert Blumen 00:10:16 Let’s drill down into that somewhat bit. Someone will get the pc of a developer who commits to a well known Python repository. Now they might be capable to dedicate one thing that shouldn’t be there into the repository. Stroll us throughout the steps, how that leads to an assault on any other a part of the ecosystem.

Dan Lorenc 00:10:37 Certain, yeah, there’s a pair alternative ways this may occur. If someone’s a maintainer of a package deal without delay — on PiPi, for instance — one of the crucial not unusual misconceptions or folks don’t slightly notice with the open-source code and these kind of languages is that you simply don’t eat the code without delay from the Git repository or one thing. You’ll, but it surely’s numerous further paintings and isn’t essentially inspired or simple. As a substitute, the general public eat this intermediate shape known as a package deal. So in case you’re a Python developer, you write your code on GitHub let’s say, and then you definately flip that into an artifact or one thing, you may, you don’t truly collect it however you package deal it up right into a wheel, or a zipper record, or one thing like that, they’re known as in Python. And then you definately add that to the Python package deal index after which folks obtain that. And so, in case you’re compromised, relying on precisely what permissions you might have it’s good to both, an attacker may just both push code without delay to the repository and look forward to that to get packaged up and despatched them to PiPi.

Dan Lorenc 00:11:27 Or if in case you have get admission to to the package deal index without delay, they may simply slip one thing right into a package deal and add that. Relying on how customers have their techniques arrange, they’d pull down that replace in an instant the very subsequent time they construct and deploy. We see this recurrently used to put in crypto miners or phish for credentials on a developer’s system — scouse borrow Amazon tokens or one thing like that. In numerous those instances, assault one developer after which that’s used to laterally transfer to assault all the folks relying on that package deal.

Robert Blumen 00:11:54 When you get this dangerous package deal then, if it’s looking to scouse borrow credentials, does it have a method to exfiltrate them again to the attacker?

Dan Lorenc 00:12:05 Yeah, this is more or less how numerous them finally end up getting detected. They could use some type of code obfuscation to cover precisely what’s happening, however it could in most cases glance one thing like somewhat script that runs, scans the house listing to search for SSH keys or different secret variables you might have saved there after which ship them to an IP deal with someplace. Some folks have got somewhat extra suave with it. I believe the well-known dependency confusion assault used DNS requests or one thing like that that aren’t recurrently flagged through firewalls to exfiltrate knowledge that approach. However once you might have a community connection, you’ll be able to’t truly agree with that the knowledge remains personal.

Robert Blumen 00:12:38 Simply now you discussed dependency confusion, that’s additionally on my record. Give an explanation for what this is.

Dan Lorenc 00:12:44 Yeah, that used to be a truly attention-grabbing assault, or magnificence of assaults I suppose, relying on how you need to symbolize it as it affected more than one other programming languages {that a} researcher discovered a while ultimate 12 months. Fortunately it used to be a researcher doing this to file the insects and shut the loops, no longer truly scouse borrow knowledge from firms, however now we do see copycats rolling out looking to scouse borrow knowledge the usage of this method. And the fundamental premise this is that numerous firms have rightly identified that publishing code and the usage of code without delay from open supply and public repositories does include some dangers. They are trying to make use of personal repositories or personal mirrors the place they’ve vetted issues and so they printed their very own code into, but it surely seems numerous those package deal managers had some options inbuilt to make it truly, truly simple to put in stuff the place it could simply check out some of these other mirrors on the similar time to search for a package deal till it discovered one. And the order there roughly stunned some people.

Dan Lorenc 00:13:29 So if in case you have an interior registry at your huge corporate the place you submit code, it seems that it in truth checked the general public one first for all of those applications. And usually that’s no longer an issue if in case you have an interior package deal title that no person is the usage of publicly to retailer your individual code. But when someone reveals out what the ones names are and occurs to add one thing to PiPi or RubyGems or one thing like that with the similar title, seems you’re going to get their code as an alternative of yours. And once you seize that, that code begins operating and it’s principally handing out far off code execution, one of the crucial worst sorts of vulnerabilities for attackers, so long as they may be able to bet the names of your applications. And that’s no longer one thing folks usually give protection to that carefully. You don’t truly see names as extremely delicate knowledge. From time to time the code is, however the title of the package deal is one thing that folks reproduction round at all times and submit in log messages and mistakes on Stack Overflow after they’re debugging. So it’s no longer one thing that’s extensively thought to be a secret.

Robert Blumen 00:14:19 If I perceive this then, assume I paintings at huge corporate XYZ and we’ve got an interior repository and in all probability if we’re in a normal perimeter community, the DNS of that repository, it’s no longer public DNS, it’s personal DNS inside the company community and it’s known as XYZ Python Registry. And in that registry we’ve got a package deal, it’s known as XYZ bank card price, one thing like that. And in line with what you mentioned, the package deal resolver in Python would possibly search for that title XYZ bank card price in a variety of various repositories, together with public repositories and it could no longer essentially desire the personal one forward of public ones. So, you’ll be able to get forward of the personal one within the line and confidently it is going to pull your code down in case you’re the dangerous man?

Dan Lorenc 00:15:19 Yeah, that used to be principally the method. It type of is sensible in case you don’t take into consideration it too carefully. When you’re putting in 200 applications, 198 of them more than likely do come from that open-source one, the general public registry. So let’s check out that first after which fall again to the opposite two occasions. This wasn’t installed deliberately, it used to be simply one thing that sat round for a greater a part of a decade prior to someone spotted that it may well be abused on this way.

Robert Blumen 00:15:38 I’ve heard of a method, which I imagine is expounded, known as typo squatting. Are you able to speak about that?

Dan Lorenc 00:15:45 Yeah, very identical. This type of bleeds into the social engineering class of assaults the place it’s exhausting to precisely classify it. However the common method there may be you discover a recurrently used package deal for a website online or software or one thing with the title and then you definately add one thing with an overly identical title, whether or not it’s a small typo, or changing a personality with the Unicode model that appears the similar until you in truth take a look at the uncooked bites, or much more social engineering variations. That is one thing we confronted so much when I used to be at Google. We’d add libraries with the title of one thing like Google Cloud Ruby Consumer. Someone else would add one with like Google Ruby Consumer or GCP Ruby consumer or switching round some of these acronyms. Creativity is unending right here, they’re a vast collection of tactics to make one thing glance actual, and the naming conventions are all roughly simply made up. Those get uploaded, and then you definately roughly have to sit down and wait — and that is the place the social engineering phase is available in — for someone to both typo it or reproduction paste it or have it display up in a seek engine someplace to seize your reproduction as an alternative of the right kind one.

Robert Blumen 00:16:41 When you’re the dangerous man then you may submit some Stack Overflow questions on that package deal, simply attempt to get it in the market in the major search engines and confidently someone else will see that on Stack Overflow and replica paste that into their. . .?

Dan Lorenc 00:16:56 Precisely.

Robert Blumen 00:16:56 K. Every other method, which if you wish to use this as a launchpad to discuss the Ken Thompson paper, could be injecting issues into the construct.

Dan Lorenc 00:17:09 Yeah, so this is more or less what took place within the SolarWinds case, however that is truly what Ken roughly identified again within the 80s. So it’s a truly attention-grabbing paper — once more, the name is “Reflections on Trusting Consider.” It’s very quick. I believe he gave the controversy in truth all through his Turing Award acceptance speech or one thing. Yeah, you must truly learn the paper. I’d inspire any one running with computer systems to do it. It’s were given a shaggy dog story too. The tale is, he used to be at Bell Labs on the time within the team that invented most current programming languages, the Unix running machine, all these items that we nonetheless use these days. When he sought after to prank his coworkers who’re all additionally extremely sensible people like him, and what he determined to do used to be insert a backdoor into the compiler they have been all the usage of.

Dan Lorenc 00:17:47 When any code were given constructed with that compiler, it could insert somewhat backdoor into that code. So, while you completed a program you constructed, it could do one thing humorous like print out the consumer’s password or one thing like that prior to it ran the remainder of this system. That used to be roughly the little backdoor that he caught in. Realizing that those people have been truly sensible and, they’d think it used to be a compiler malicious program, he made the compiler roughly propagate this so he went any other point right here. So as an alternative of simply having this backdoor within the supply code, development a compiler, dealing with that to oldsters — they’d right away then move construct a brand new compiler to paintings round it. He made it propagate. So, the compiler when it used to be compiling a regular program would insert this backdoor, but when it used to be compiling a brand new compiler it could insert the backdoor once more into that compiler so it endured to propagate.

Dan Lorenc 00:18:28 So he did this, gave everybody the compiler, needed to roughly conceal and take a seat and look forward to somewhat bit, deleted all of the supply codes. Now there’s not more proof this backdoor existed; the compiler simply roughly had it there within the byte code. And it could propagate again doorways into each and every program it constructed. Now he knew the oldsters have been additionally sensible sufficient to take a look at the uncooked meeting and determine what used to be taking place and be capable to take away it through patching this system without delay. So he went yet one more point — and this isn’t within the authentic paper, I swear I noticed this someplace in one of the crucial little talks however I haven’t been in a position to search out it once more — he additionally made it in order that while you have been compiling the disassembler that folks would use to learn the uncooked system code, it could insert a backdoor into the disassembler to cover the again doorways in all the techniques. So consider those people stepping throughout the code within the disassembler, attending to the segment, seeing no proof of any backdoor any place after which their password’s nonetheless getting published out. Since the compiler, the disassembler, and all of the techniques have roughly been backdoored at that point.

Robert Blumen 00:19:16 This strikes a chord in my memory of items I’ve heard about root kits that may intercept machine calls, so while you attempt to record recordsdata to look if in case you have a malicious record, it is going to intercept the LS and no longer display you the record.

Dan Lorenc 00:19:29 Yeah, similar to one thing like that the place the again door’s running at a decrease point so that you can also be imaginable to hit upon. He roughly principally confirmed that until you might have agree with in each and every piece of tool and power and repair that used to be used to construct the tool you’re the usage of, recursively, all of the as far back as the primary compilers that bootstrapped each and every programming language, then it’s exhausting to have any agree with within the techniques that we’re operating these days as a result of the whole lot may just be able to being backdoored after which hiding the ones again doorways. There were some ways to mitigate this with more than one reproducible builds and the usage of other compilers and other outputs and such things as that, but it surely’s all very sophisticated and frightening.

Robert Blumen 00:20:05 What in regards to the function of code obfuscation which this, this situation you’re speaking about with Ken Thompson may well be thought to be an instance of code obfuscation. Are there others?

Dan Lorenc 00:20:15 Yeah, yeah those are used so much. Numerous safety scanners and static research equipment simply roughly learn code and search for issues that shouldn’t be doing sort at a cursory point, and fortunately numerous attackers are lazy and don’t move throughout the hassle of hiding stuff an excessive amount of. So you’ll be able to see stuff like issues getting uploaded to random IP addresses or domain names in different international locations, however some people do attempt to obfuscate it and conceal it, conceal those strengths which are recurrently looked for and, base 64 encoding or one thing like this. And that roughly has an obstacle too as a result of obfuscated code is in most cases, there’s additionally scanners which are truly just right at in search of stuff that’s been deliberately obfuscated. So yeah, it’s roughly a trade-off both approach.

Dan Lorenc 00:20:56 You’ll take it farther regardless that, proper? Those are all roughly automatic obfuscation ways that depart some roughly fingerprints of what they do. There’s guide tactics to do that as smartly. There are numerous “malicious program doorways,” I believe is the method there the place if it’s good to learn code and notice each and every malicious program, then you definately’d be the most efficient programmer on the earth. No person can do this, and it’s imaginable to write down code that leaves a malicious program in position that you simply knew used to be there {that a} reviewer or someone else would possibly no longer understand. There’s an ideal pageant each and every 12 months known as the World Obfuscated C Code Pageant. I’m no longer certain in case you’re conversant in this. In it, yearly persons are challenged to write down C code that does one activity however then does one thing else as malicious or humorous as imaginable that folks can’t see upon a cursory learn. When you’ve ever observed a few of these submissions then, yeah, you’d more than likely be terrified on the thought of obfuscated code sitting in simple sight.

Robert Blumen 00:21:39 I’ve checked out a few of the ones submissions. I did at one level know the way to program in C, and having a look at those techniques I completely may just no longer inform what any of them did.

Dan Lorenc 00:21:49 Yeah, and the running techniques that all of us use these days are hundreds of thousands of strains of code of C written those similar tactics. It’s a miracle any of it really works.

Robert Blumen 00:21:58 Now we have mentioned a few examples right here: the Ken Thompson and the dependency confusion assault, which used to be introduced through a researcher named Alex Birsan. He has an ideal article about that on Medium. Let’s communicate now extra about one of the crucial assaults you’ve discussed that I mentioned I’d come again to, beginning with the Log4Shell.

Dan Lorenc 00:22:22 Certain. Yeah, that used to be truly a worst-case situation that used to be, these kinds of issues are simply inevitable through the years. However yeah, this used to be a vulnerability in a surprisingly recurrently used library, principally used for logging throughout all the Java ecosystem, and Java is likely one of the maximum recurrently used programming languages all over the world. I say all over the world, however I believe this program in Log4Shell and Log4J are in truth operating at the Mars Rover, so no longer even simply the world over — somewhat little bit of hyperbole, however this used to be around the sun machine at this level. That’s how recurrently used this code used to be. And it used to be only a malicious program sitting provide the place when the logging library attempted to log a particular string it may well be exploited to allow far off code execution — once more, the worst type of vulnerability as a result of that implies it’s downloading code from some untrusted individual and operating it for your relied on setting — used to be provide for a very long time.

Dan Lorenc 00:23:12 It used to be found out through a researcher, it used to be reported, and the fixes have been rolled out as temporarily as imaginable. There used to be some chaos clearly concerned as a result of then researchers discovered this magnificence of assault used to be imaginable and located a host extra on the similar time that the maintainers have been looking to repair the primary one. So it took a short time to get all of them patched, however within the intervening time, attackers discovered it beautiful temporarily and began looking to exploit this over the web. And it used to be so simple as typing this sort of strings into the password box on a website online or one thing like that to cause an error message that would possibly get logged. So we have been attempting this around the web, principally, and reaching nice effects over a pair days till organizations have been in a position to roll out those fixes.

Robert Blumen 00:23:49 One in every of my questions used to be going to be, I’d suppose that the programmers who wrote the code have keep an eye on over what will get logged. I’m normally writing log messages like ‘can’t connect with database.’ So my query used to be going to be how does an attacker get data to look within the log? The way in which they might do this is they’re coming into fields in paperwork which they know are incorrect and they’re creating a bet, which goes to be true in lots of instances that the programmer goes to log both all inputs or improper enter.

Dan Lorenc 00:24:27 Yeah, that’s principally right kind. You’ll do that in http headers and numerous servers will log the ones, you’ll be able to stick it in IP deal with fields and stuff like that to cause intentional mistakes. When builders wish to debug one thing in manufacturing, they would like as a lot knowledge imaginable, so it’s not unusual to log numerous these items. Lately, on account of all of the privateness and constraints in GDPR folks have began scrubbing log messages for PII (in my opinion identifiable data), however prior to that it used to be beautiful not unusual observe to log the whole lot, which would possibly come with usernames and from time to time transparent textual content passwords, and stuff like this, which we’re an entire boon for attackers too looking to scouse borrow knowledge. For probably the most phase, log entries aren’t thought to be delicate and folks don’t sanitize it to the level they must.

Robert Blumen 00:25:06 So, following this down the chain, I input the dangerous string within the password, I’m guessing appropriately that the developer has a remark that claims log-level caution: improper password. How does that translate into some dangerous code with the ability to run at the Java digital system?

Dan Lorenc 00:25:27 Yeah, so that is some beautiful technical main points in Java and, I believe this can be a case of roughly, I believe the time period I noticed is like an ‘intersection vulnerability’ the place it wasn’t truly one dedicate or something that added the malicious program; it used to be roughly the intersection of 2 commits that have been each tremendous through themselves but if operated in combination result in accidental conduct, and this occurs at all times. However yeah, the Java library right here helps roughly macros or template enlargement or such things as this in log messages to make it more uncomplicated to make use of and as an ideal characteristic. After which on the similar time the JVM and Java itself used to be designed to run in all kinds of environments, proper? Some even come with browsers the place you’ll be able to embed a JVM in a browser, and there’s somewhat characteristic the place it will move load an applet or one thing over the web and run that for your browser tab, and it became out that that used to be roughly simply left on through default in numerous those instances — that conduct to move dynamically load some code from a URL and run it.

Dan Lorenc 00:26:17 And it became out that relying on what template strings you handed into this logging library, you could possibly cause it to move obtain code and run it from the web because it expands those templates to fill in different variables and different contexts into the logging message. In order that used to be principally it. There have been a pair different issues essential to get complete far off code exploitation, like the method had to have get admission to to the web as a way to make a request to move obtain some code and execute it, such things as that. However at a minimal, folks have been in a position to cause crashes and different sorts of dangerous conduct — availability assaults that, although the method didn’t have web connection, may just nonetheless take down the method and cause dangerous conduct.

Robert Blumen 00:26:56 If I perceive this, if I’m the dangerous man then I put a string in my malicious password or my malicious http header, and that string has in it a small pc program that claims one thing like ‘http get www.bagguy.com/backdoor,’ it is going to load that code into the JVM, it could possibly have a buck signal or one thing round it to inform the interpreter that it’s code, and the interpreter will then run that code and do no matter it does. Is that it, kind of?

Dan Lorenc 00:27:35 Lovely identical? Yeah, principally folks construct like a small programming language into those logging libraries. So you’ll be able to do stuff like possibly break up a string or uppercase it or one thing like that prior to it were given locked, and there’s a host of integrated purposes like, for instance, uppercase a string or including areas, or one thing like that, or formatting as html — those sort issues that you may wish to do prior to logs get written. And one of the crucial options of the JVM is that it’s good to additionally load in different purposes reasonably than simply those integrated ones. You must have customized formatters or customized helpers for your logging library, and in case you cross in a URL to that reasonably than the serve as, only a like integrated serve as, it could move fetch a jar from that URL after which attempt to execute that serve as and from that jar that it simply downloaded from the web. So there used to be no make it possible for got here from a server you relied on, there used to be no ensure you knew anything else about that code. And in order that’s roughly how this used to be precipitated. Other folks would simply installed a URL containing a malicious jar after which put the URL to that on this logging movement,

Robert Blumen 00:28:47 Every other podcast I concentrate to, Safety Now, it’s a not unusual theme of insects they talk about that someplace alongside the road there may be an interpreter or compiler concerned, and in some instances the place you wouldn’t be expecting it. I take note one instance of a program that shows pictures like JPEGs or one thing like that used to be operating an interpreter, and someone used that as an assault vector. Now, if I do know that I’m compiling code — we’re no longer going to break out from having compilers — I’m going to position it on Jenkins, and if I do know that Jenkins is inclined, I’m going to take numerous steps to safe it. What’s disarming about that is the presence of those compilers and interpreters in puts the place you truly don’t be expecting them so your guard is down and also you’re no longer doing all of the issues you might do to give protection to a compiler.

Dan Lorenc 00:29:44 Precisely, yeah, that’s an effective way to position it. Yeah, there’s an extended, I suppose, spectrum between complete Turing-complete interpreter that may do the whole lot after which very limited interpreter that may most effective do a pair issues that we’ve informed it will possibly do. And it’s no longer all the time transparent precisely the place you’re. Numerous those compression algorithms — JPEG and a few of these different codecs that you simply introduced up — are like little interpreters. The way in which that they compress a picture is, as an alternative of storing each and every unmarried pixel and the values, they’ll roughly generate this little program that may spit out the total ensuing symbol, and in numerous instances that may take in so much much less house. A easy instance to suppose thru for your head is in case you had one thousand through one thousand symbol and all of the pixels have been black, it’s good to both retailer one thousand through one thousand little bites announcing this pixel is black, or it’s good to simply write two little for loops or one thing like that and say for i in vary for j vary print black. And that 2nd one is far, a lot, a lot smaller to retailer, and in order that’s principally one of the crucial elementary rules to numerous those fancy compression algorithms.

Dan Lorenc 00:30:44 And in the event that they’re no longer applied completely right kind, then you definately don’t know that that’s what it’s doing, you’re executing some arbitrary code. And if that triggers a malicious program then you definately’ve were given an interpreter operating in opposition to untrusted code. It would no longer be capable to do the whole lot, but it surely could possibly do sufficient to purpose some havoc.

Robert Blumen 00:31:01 Have you learnt of any examples of the way the Log4J used to be exploited within the wild?

Dan Lorenc 00:31:07 So, there used to be only a contemporary file that got here out of the DOD and roughly an advisory council, the USA govt doing roughly a postmortem at the total assault. Happily, they discovered not anything extraordinarily severe took place, which is moderately sudden within the fast wake of the assault. There have been some a laugh roughly examples taking place the place folks, I believe someone who used to be regarding it as like a vaccine or one thing like this the place you’re operating arbitrary code. There have been some, like, just right Samaritans which are roughly on this grey house, however they have been purposefully triggering this exploit and as an alternative of doing anything else dangerous they have been patching the exploit. So, there have been a host of folks roughly racing in opposition to attackers in the ones couple days spamming requests in all places with the ones malicious consumer names to patch servers that have been inclined. In order that used to be a a laugh little instance, however I believe that is one the place we’re going to look an extended tail fallout.

Dan Lorenc 00:31:52 I don’t suppose there’s any likelihood in any respect that all the international has patched each and every inclined example to Log4Shell and that there are a host of roughly shadow IT or machines that folks forgot about which are nonetheless operating and keeping up load-bearing techniques. This exploit is so easy to do this it’s simply going to sit down there in an each and every attacker’s toolbox and as they are trying to laterally transfer within organizations, they’re going to check the whole lot they may be able to in finding in opposition to Log4Shell, and I ensure any person’s going to proceed to search out those more than likely for the following decade.

Robert Blumen 00:32:19 It’s no longer atypical you examine an assault the place the corporate had a machine that contained a malicious program for which a patch have been to be had for slightly a while and for no matter reason why they hadn’t implemented it.

Dan Lorenc 00:32:34 Yeah, yeah. That is extremely not unusual. There’s a host of issues right here that make this truly exhausting to unravel. It’s no longer so simple as why didn’t you repair it? We informed you to. Shadow It’s the large time period thrown round so much right here. There’s numerous infrastructure within organizations that don’t display up on the ones spreadsheets and asset control databases. So, in case you patch the whole lot within your corporate, it’s just like the recognized unknowns roughly factor. You most effective patch the belongings you knew about. No CISO goes to sit down in entrance of Congress and say that they patched the whole lot; they’re going to mention they patched the whole lot they’re conscious about. Through definition, you’ll be able to most effective patch the issues about. After which on the similar time, there are such a lot of patches and such a lot tool flying round that folks do must do triage.

Dan Lorenc 00:33:12 You’ll’t simply patch the whole lot and follow each and every patch that is available in. Other folks wish to make risk-based choices right here since the signal-to-noise ratio is so huge. If you’re taking an overly up-to-date, very recurrently used container symbol these days which are used in every single place cloud, like docker pictures or one thing, and also you run some of these scanners in opposition to it, you’re going to search out masses of vulnerabilities. Some have patches, some don’t. Maximum are marked as low or medium severity, and until you learn each and every unmarried one to determine the precise cases it may be precipitated, you don’t know if you wish to have to roughly forestall what you’re doing and patch it. So for probably the most phase folks set thresholds and tracking in line with criticality numbers and rankings and principally attempt to do the most efficient they may be able to with what they learn about.

Robert Blumen 00:33:53 I wish to transfer directly to any other this sort of assaults that I promised to come back again to: Sun Winds. What used to be that about?

Dan Lorenc 00:34:01 Certain, yeah, so the SolarWinds group, it’s an organization, they make an entire bunch of various items of tool. One in every of them used to be this sort of community tracking tool. Device like that, it’s normally put in in very delicate environments and screens networks to search for assaults. So it’s roughly having a look thru quite a lot of packets and seeing quite a lot of delicate data fly through because it does its task. What took place is the construct server at SolarWinds used to be compromised thru some roughly chain of conventional assaults, however an attacker were given a footprint on the true construct server. This used to be the server the place the supply code used to be uploaded to, it ran some compilation step and signed and despatched out the type of executable on the finish, and that’s how the code used to be delivered to finish customers. The attackers, as an alternative of simply compromising the SolarWinds group, doing ransomware or stealing their knowledge or one thing, as an alternative had their little backdoor at the server, watched for the compiler to start out, drop in some further supply code recordsdata, look forward to the compiler to complete after which delete them on the finish.

Dan Lorenc 00:34:55 So no longer truly backdooring the compiler itself, however passing in some dangerous enter proper prior to it began. So it’s quite other from the Ken Thompson instance however beautiful identical in impact. So in case you regarded it fetched the precise supply code, it ran the construct and right here’s the item it were given after all simply it additionally had this little malicious part inside it. Then that tool used to be uploaded, shipped to all of the paying consumers, they put in it and the code were given to do no matter it sought after at that time. And that is one the place it waited some roughly random collection of days after set up, however a sexy lengthy time period to keep away from any fast detection after which would get started sniffing, accumulating knowledge, after which importing it to a few endpoints. It used to be in the end stuck on account of that after it in truth was lively. They noticed community visitors they didn’t be expecting, It’s somewhat exhausting to hit upon as a result of the program used to be put in or up to date weeks or days prior to, no longer right away, proper? When you replace a brand new model and abruptly community visitors you don’t be expecting occurs right away, it’s beautiful simple to pinpoint what took place. However through ready somewhat bit, it makes it somewhat bit more difficult to pin down the basis purpose. The corporate discovered what took place, did a host of study, discovered precisely how the assault used to be performed, tore down that construct machine, did a host of labor to toughen safety there … however at that time, numerous injury have been achieved to all the customers.

Robert Blumen 00:36:02 This situation illustrates the purpose you made in the beginning about how everyone’s output is a part of the availability chain, someone else’s enter. So even supposing the unique assault used to be at the dealer, that used to be used to inject the again door into the availability chain additional downstream in their consumers.

Dan Lorenc 00:36:24 Precisely. Those assaults take somewhat bit extra persistence, you’ll be able to’t slightly be as focused in them, however they have got a lot broader ranging penalties, proper? You’ll goal one group with a conventional assault; with a provide chain assault, you’re roughly left to who applies updates and who that group’s consumers are. However as an alternative of 1 group, you’re getting dozens, masses, hundreds, on the other hand many people use this tool.

Robert Blumen 00:36:46 I believe I learn Alex Birsan — the “dependency confusion” researcher — when he put out a few of these applications, he didn’t know which enterprises could be pulling his package deal. He most effective figured that out when he used to be in a position to exfiltrate from inside of the ones enterprises and notice the place his code ended up.

Dan Lorenc 00:37:07 Yeah, I believe he, I’m attempting to bear in mind the unique block quote. I believe there would possibly were a couple of. Yeah I believe it used to be a mixture of guessing after which additionally there have been some focused ones the place firms would simply put their title to prefix the package deal or one thing like that to cause it to visit the inner one. So I believe it used to be a mixture of semi-targeted as opposed to simply let’s add stuff and notice who downloads it.

Robert Blumen 00:37:25 Transferring on then, any other this sort of assaults that got here in thru a construction software is referred to as Codecov. Are you conversant in that one?

Dan Lorenc 00:37:36 Yep. So Codecov is a product, and so they additionally be offering like a unfastened model of it for open-source repositories to do code protection research. So, while you run your exams it makes an attempt to determine what share of your code exams exercised. So in most cases the extra the simpler and it’s very recurrently used throughout open supply. When you’re operating a GitHub or one thing like that within the CI techniques, you’ll be able to simply drop this plugin in and also you get a neat little UI appearing you your code protection through the years. They’d an installer for this in CI techniques that used to be only a batch script. Mainly, set up directions have been obtain and run this batch script from a URL, and it used to be a identical case the place an attacker roughly pivoted.

Dan Lorenc 00:38:20 They focused Codecov, discovered — I believe the basis purpose used to be they discovered a secret to an S3 bucket or one thing like that for Codecov — used that to go searching what used to be within the bucket, noticed that this set up script used to be in there, discovered that no matter used to be on this set up script is what used to be getting downloaded and run through all of those CI jobs. They only inserted a pair strains to that script each and every time it used to be up to date to seize all the setting variables, seize no matter used to be on disk that it will in finding within the server and add it to a URL. And this went undetected for some time. They’d put it in, take it again out for a short time; the attacker would trade it on once more and stale once more through the years, so it wasn’t all the time provide. And somebody with CI techniques the usage of Codecov all through this breach needed to evaluation the affect of getting all in their different secrets and techniques and knowledge from that CI task, exfiltrated into some group.

Dan Lorenc 00:39:01 So this used to be a provide chain assault that still attacked different provide chains, I suppose. Those are all different equipment which are used. One of the examples I discovered with the Codecov script proper prior to and after the Codecov script in CI have been secrets and techniques to signal and add code to Maven Central for sure open-source tasks. And those are the sorts of issues that were given exfiltrated all through this assault. So it used to be one pivot from the group to their customers after which I’d be stunned if there weren’t different secrets and techniques stolen on this which are these days being held or were used for additional assaults down the availability chain.

Robert Blumen 00:39:34 Have you learnt to any extent further about how that used to be detected? You mentioned folks spotted it used to be exfiltrating.

Dan Lorenc 00:39:41 I imagine, I will be able to’t say needless to say, however I imagine someone simply after months and months, some consumer in truth simply downloaded the script from the URL and browse it and noticed some bizarre code on the backside and filed some malicious program announcing good day what are those two strains doing? And that precipitated the detection.

Robert Blumen 00:39:56 Every other well known incident used to be referred to as Icon Burst. Are you conversant in that one?

Dan Lorenc 00:40:01 Yeah, so I imagine this used to be a compromised package deal on NPM that had some malicious code inserted inside it. NPM is, like I mentioned, probably the most well-liked and biggest repository through some distance. So lots of the headlines you spot about compromises like this do occur in NPM simply on account of the sheer numbers. However this kind of factor occurs in all the different package deal managers and registries too. I don’t take note the basis purpose for that one, precisely how the package deal used to be compromised. There’s a miles of various patterns we see, like in a person developer will get compromised. We see folks compromise their very own applications through the years. These kinds of were given known as ransomware during the last couple of, or no longer ransomware, “protestware” during the last couple of years. We’ve observed that a couple of occasions, however there’s lots of various tactics it will possibly occur, and relying on how extensively used those applications are, the affect varies so much. From time to time they’re stuck prior to any one makes use of them; from time to time they’re stuck a lot later.

Robert Blumen 00:40:56 Only one extra, this would be the ultimate incident. It’s somewhat other in that it got here in thru a talk utility. This one is known as Iron Tiger. Do you might have a background in that one?

Dan Lorenc 00:41:07 Yeah, so I believe Iron Tiger used to be the gang that used to be suspected for doing this — the code title for the APT or complicated power risk. Yeah, so this used to be a talk utility, I believe it used to be known as Mimi, recurrently utilized in China. And the chat utility used to be for all types of various telephones and desktop running techniques and the whole lot. And a few malware used to be inserted into one of the crucial installers for Mimi on the distribution server. So similar to the Codecov instance, simply as an alternative of a construction software, this used to be a talk utility. So it used to be constructed, uploaded to the server, and someone had compromised that server. So it wasn’t the construct server, it used to be where that the applications have been saved and downloaded from. Each and every time a brand new model were given uploaded the attackers grabbed that, added some malware to it, after which put it again on this changed shape. So any one putting in it and the usage of that installer in truth grabbed a compromised model reasonably than the meant model.

Robert Blumen 00:42:02 I wish to wrap up right here. In reviewing those other assaults, it’s exhausting for me to look a lot commonality instead of that somehow they contain the availability chain, however I’m having hassle drawing any truly most sensible 10 classes realized. What’s your viewpoint on that? Are there any actual takeaways from this, or is that this extra on the subject of doing all of the issues that folks already know like patching and two-factor and protective credentials and the whole lot else?

Dan Lorenc 00:42:35 Yeah, I believe there’s numerous like low placing fruit that people already know, roughly brush your tooth, consume your greens taste recommendation that folks know they must were doing, however roughly by no means truly prioritized till now. That things you discussed is just right. Yeah, use two-factor auth to forestall phishing, patch your tool, that roughly stuff. The opposite large truly lost sight of one and I believe is solely common construct machine safety. No longer to select on Jenkins, it’s simply probably the most recurrently used one, however maximum organizations for the decade were tremendous with folks simply grabbing a pair outdated items of {hardware}, throwing Jenkins on them, sticking them in a closet someplace and the usage of that as their authentic construct and deployment system. You can by no means run manufacturing that approach, proper? You can by no means run your manufacturing servers on a pair servers that no person checked out or patched and even truly knew have been there sitting in a closet.

Dan Lorenc 00:43:17 However for some reason why folks were tremendous doing that for the construct and deployment techniques. The ones are the gateway to manufacturing. The whole lot that is going into manufacturing comes thru the ones techniques. So it most effective is sensible that you simply must follow the similar form of manufacturing hygiene and safety and laws to those who you do to manufacturing. So I believe that’s the massive shift. Not anything loopy that has to occur there. Like we all know what to do, simply run your construct techniques like manufacturing techniques and also you’ll be proof against numerous those assaults, however folks simply haven’t prioritized that paintings.

Robert Blumen 00:43:45 One different matter that got here up in Device Engineering Radio 489 on package deal control is we were given right into a dialogue in regards to the recursive nature of package deal control the place your package deal supervisor pulls within the applications that you simply requested for after which it cascades right down to the applications that the ones applications requested for and so forth and so forth, kind of eternally till you’ve pulled in masses or hundreds of applications that in case you regarded on the fullest you may no longer even know what part of them do or why they’re there. And but, we need to agree with all that code. Is that an insolvable drawback, or can we simply must agree with that the web is just right? Are there tactics to be somewhat extra assured that we’re no longer pulling in a wide variety of again doorways after we run our package deal supervisor?

Dan Lorenc 00:44:36 Yeah, it’s an ideal level and package deal managers simply roughly moved up in abstraction through the years. To start with, maximum C programmers and C++ programmers slightly have any kinds of package deal control. It’s roughly guide and grabbing recordsdata and copying them into your repository your self. This makes sharing code exhausting, but it surely makes you beautiful cognizant of precisely what you’re the usage of since you copied it and put it there. However as new languages have taken off, they’ve began to come back with like a extra batteries-included package deal supervisor — such things as Python and Pass and JavaScript — and you’ll be able to’t truly release a brand new programming language these days and not using a package deal supervisor. There were any other roughly transferring tendencies too, proper? Other folks weren’t logo new to package deal managers. Linux distributions have had them in position for years. You run appget or yams or one thing like that, and also you get applications and their dependencies.

Dan Lorenc 00:45:16 However what the ones techniques truly equipped used to be curation, proper? You couldn’t seize any package deal. You most effective had those that the distribution maintainers agreed to offer and patch and care for, which used to be a small set, but it surely used to be curated, it used to be maintained. They would supply fixes for it; you knew who you have been getting it from, whether or not it used to be an organization you had a freelance with or a relied on team of maintainers that experience labored in combination for 10 years and care about safety. However while you run PIP set up or NPM set up, it’s no longer from any one on the web that’s signed up for that repository. The command seems to be the similar, however the implications are utterly other. There is not any agree with anymore. So, you’re getting all the comfort, however not one of the agree with or promises.

Dan Lorenc 00:45:56 Then bins and different kinds of higher-level infrastructure got here, which might be like meta package deal managers, and so they seize all of those in combination and package deal them and you’ll be able to do PIP installs and NPM installs and appget installs all in the similar setting and zip that up. Every other one known as Helm is a package deal supervisor for bins. So, you’re getting a host of bins and a host of alternative Helm charts in roughly the Kubernetes international. You’re more than one layers deep at this level and it roughly explodes combinatorically. So, it’s a kind of issues the place it’s grown progressively through the years. There hasn’t been one second when it roughly were given out of keep an eye on, however now we’re having a look again at it and there’s tens of hundreds of items from random folks on the web getting run, used for a hi international utility.

Dan Lorenc 00:46:35 I really like the best way you framed it. Like, can we simply must agree with that the web is just right? Anyone that’s hung out on the web is aware of that’s no longer a just right technique. Simply trusting that everybody is good on the web, that’s no longer going to paintings eternally. I believe there’s a pair issues we simply must do. We need to get extra conscious about what’s getting pulled in. Numerous that’s effort from the USA govt within the govt order from ultimate 12 months round this; it’s focused-on transparency. So, Device Invoice of Fabrics are actually a factor. You’ll’t simply distribute tool tens of hundreds of items within with out telling somebody or with out figuring out what’s in there. Organizations are required to offer that Invoice of Fabrics so folks can no less than see what’s inside it and come to a decision in the event that they agree with it. With that, I believe goes to come back panic when folks notice precisely how a lot is in there. Other folks should get started getting extra rigorous about it. You’ll’t seize hundreds of items for a small utility. Individuals are going to chase away and also you’re going to pay extra consideration to the trustworthiness of the code that you simply’re the usage of. But it surely’s going to be slow.

Robert Blumen 00:47:23 Dan, what does your corporate do?

Dan Lorenc 00:47:25 Certain. My corporate is, the title is Chainguard. Now we have a host of open-source equipment and merchandise to assist builders resolve all of those provide chain safety issues simply. Nice leaping off level, numerous that is truly on the subject of consciousness and figuring out what goes into your code. And it seems this is in truth an ideal get advantages for builders, and that’s no longer one thing that makes your existence more difficult. It in truth makes existence more uncomplicated if the whole lot is finished appropriately. All of the sophisticated bookkeeping about dependencies and which variations and whether or not up to the moment applies on your code too. And if in case you have a truly just right figuring out of what’s operating the place, you’ll be able to get a extra productive construction cycle reasonably than moving into folks’s approach. In order that’s what we’re looking to resolve.

Robert Blumen 00:48:03 Dan, the place can folks in finding you in the event that they wish to succeed in out or practice what you do?

Dan Lorenc 00:48:09 Certain. My corporate’s URL is chainguard.dev, and you’ll be able to in finding me on Twitter @Lorenc_Dan

Robert Blumen 00:48:17 Dan, it’s been an enchanting dialogue. Thanks such a lot for talking to Device Engineering Radio.

Dan Lorenc 00:48:23 Yeah, thanks for having me.

Robert Blumen 00:48:25 For Device Engineering Radio, this has been Robert Blumen and thanks for listening. [End of Audio]

Like this post? Please share to your friends:
Leave a Reply

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: