So I'm on the Dennis Grime. I'm here today to talk about resilient botnet command and control with Tor. I came up with this title while working on the CFP at the very end of the deadline and it's probably a bit dry. So I decided I should probably rename this talk to something a little more fun. So here's the new title screen. I think it's the point across about like Tor and hidden of paint. I'll take that as a compliment for my wonderful Photoshop skills. So who am I? I'm Dennis Brown, like I said. I'm a security researcher for our tenable network solutions which if anybody asks me if they've been asking all week that I'll just say I write and ask these plugins. It doesn't really matter what I do. So a few times at Torcon I spoke yesterday here at DEF CON about something about as far from this topic as you can get. So this is a nice change if you can follow me around. Thanks for being a groupie. I'm also a part of the Rhode Island DEF CON group DC 401. Anyone here from Rhode Island? Yes. That's all of us. So that's where I am. What I'm not in the disclaimer area is I'm not affiliated with the Tor project at all. I want to make that clear up front. I have nothing to really do with them at all. In fact I really want to say that I love Tor a lot. People might be thinking, oh you shouldn't be doing bad things without I agree. It's a really great tool. Most of the people that use it really aren't using it for bad purposes either. I don't know if any of you followed the stuff going on like people trying to get websites from China, Chinese trying to block Tor access and stuff like that. I know last year when I was following the election going on in Iran it was wonderful seeing people using Tor and other proxies to get the word out and get all kinds of information that's going on in the western world at least. So I really do love Tor. I don't want people to really think that I'm just trying to use it for my own evil purposes because I'm really not in trying to make us aware so we're not doing it for evil. But just like any good tool it can be abused. Just like anything else, anonymity is great for us. It's great for people who need it, for people who are oppressed, but it also is good for people who want to do bad things. So it's how it is. So here's a little overview of what we'll be talking about today or what I'll be talking about today. We're focusing on botnet command and control, specifically command and control, but a few other factors around it as well because there's a lot of interesting things we can do with this. I'll be doing a few case studies or a case study using Zeus or Zbot or whatever you may know it as. And talk about a few theoretical models inspired by some of the other big bots and worms and whatnot that we've seen over the last few years. I'm going to talk about a few techniques too to use a tour to anonymize your servers because that's really what this is all about. How many people here are actually familiar with hidden services with tour? That's one way I expected actually. It seems to be one of those features that just more people really need to know about. So you should learn about it. You'll learn all about it here. And the goal of this is actually to keep your servers up and keep your botnets alive because I'm sure we're all terrible people and have bad so and whatnot. So we're going to talk about the ways this is good, the ways this is bad, strengths, weaknesses, all stuff like that. So you may be asking yourself, well, why is this important to talk about? That sounds like it's just something terrible people shouldn't be doing or it's awesome. I'm going to go home and do it myself. There's been a lot of discussion over the years in various forums in the research community about people being a little worried that some malware might actually be using tour. I know there's been several discussions that I've been a part of that people are like, wow, if it really did that, this could be terrible. We would never be able to detect the traffic. I don't know if anything like this actually exists. If anyone does, I'd love to hear about it. I don't know how much research has been done either. I looked around and they didn't see much. So I'm hoping to shine a light on it here. There's a lot more work to be done in this space that I'm presenting today and it's really just right for the picking in my opinion. And what's great, well, what's terrible about it is there's a big potential for this devastating impact on networks and computers as we see them today. The technology for this is tour is free to download. Anybody can get it. Anybody can implement it however they want. It's very easy. I'm sure we've all used it at one point or another and know how easy it is to use tour. And it's really minimal effort and you get great anonymity with it as great as tour is. And I know there's a lot of people who use tour for all sorts of purposes every day and I've never heard of anyone actually having a problem with that unless they did something wrong themselves. And we're going to talk a bit about some safeguards that can be taken to detect this activity. And these have varying levels of complexity depending on the techniques you use, the approach you take and how you actually implement it all from end to end. So let's get on with some fun stuff here. Thank you, Spider-Man. So I don't know about anybody here actually have a botnet? Anybody? Yes. Thank you over there. If there's any feds, let's go over it that way. So I'm sure we all have though for real, but it sucks when your botnet gets taken down, right? Isn't that the worst thing that can happen? Really? You spend so much, it really comes down to time and money that you put into it to get it together and actually make it real and be able to make some money off of it. As far as like spending time on it, you have to spend a lot of time planning this.  And you have to spend a lot of time planning it, figuring out who you need to talk to for what services you need, how you're going to implement it all, and how you're not going to get caught. Setting up the servers themselves can take quite a bit of time. If you're buying some, posting from a bulletproof provider somewhere in Eastern Europe, you'll have to talk with them. If you don't speak the language, that's another hurdle you have to get over. And try to figure out how you're going to get the services from them and how you're going to get what you need on the service they give you. If you're doing another method, say you're compromising boxes after scanning for SSH passwords for forcing them, you're going to have to figure out how you set it up and not get caught that way too. So that's another method you could take to actually have a server to put your botnet on. Building the bot itself can be a whole lot of time. If you're coding it from scratch, that could take weeks, months, years to do it just right. If you're buying it, well, you're still going to have to figure out how to use it and how to deploy it. That's not the easiest thing in the world, but if you see one that you can actually just buy in a little bit here, then there's other things like crypting it so AVs don't pick it up, so you have a different binary every day so you can evade all kinds of detection, binding it, whatever else you want to do with it to make it undetectable or load other malware on it like fake antivirus to make some good scratch that way. And then spreading. Spreading through BitTorrent is a great way to get your malware out there initially if you make some cool hack for whatever, for Modern Warfare 2 or whatever, I don't know. Or then that's one approach you can take. That takes a while for it to see for people to get it, so it's a big time investment there. Or if you go say you want to do a drive-by download attack, you go do some SQL injection against some server, see what sticks and doesn't, well, it takes time for that to happen, time for it to get queued up in a search engine, and ultimately that's a lot of time you're waiting for it to actually impact to the point where you have a botnet of any kind of size as of interest. If you're doing spearfishing or any kind of spam campaign to spread it to, that's more time you're spending. And if you're not spending time, you're spending money. All these things are services you can buy. Like buying spam services, buying drive-by download services, just saying, hey, I have some malware here. I'd like to get it distributed to 10,000 hosts. Okay, well, pay me however much money that costs these days, and I'll get it out there for you.  So each one of these things here, it's a lot of money, and you don't want to lose that monetary investment, even worse than losing the time investment a lot of ways, because then that's just a waste of everybody's time. And when you don't have a botnet at all, if it's actually gotten taken down, well, then you just lost all your income. To do spamming, sell spamming services, lease it out to other people who want to do these kind of activities, well, then if you're shut down, then you're not making money, and that's no good at all, although it actually is really good if you're on the defensive side, which is where I actually am. So how do they get taken down? There's a variety of ways. If you have a VGPD pairing, it seems to be the best way to get taken down. That's the ones that seem to be the most effective, and more or less. Some of the big examples, Mikolo in 2008 was taken down. They were really big in spamming. Actually, there was a short period where there was a big decrease in spam after Mikolo was taken down, while everybody was rushing to find new places to host their spamming. And they were also the host for the main command and control server for the AS Prox or AS Prox botnet, which once that was taken down, that botnet never really recovered quite the same. They tried to come back a few times, but not like the good old days of 2008. And then Triaco was a big one this year. These guys were interesting because they kept going down and coming back up and having this cat and mouse game between people trying to take them down and new hosting, or upstream providers that just said, yeah, come on, we'll host your stuff. We don't really know what you have. They were hosting a whole lot of Zeus command and control servers. I think it was something like, I forget the exact number. It was somewhere in the hundreds, I think, which is a pretty big distribution of Zeus command and control servers. That was interesting to see how that went off. Another way to, if you're just using some host you popped or something, or if you're using some free web hosting, I know almost all the HTTP botnets just use a PHP and MySQL interface of their command and control. There's a lot of free web hosting now like 110mb.com comes to mind, where they actually provide you PHP and MySQL. And a lot of people recommend just say, hop on there, get it set up, get it started, and then if you have something good, make some money and buy some real hosting so people are actually starting out with that stuff. And every so often, the people who are either running the servers that you may have gotten into or running these free hosting providers will clean up sometimes, hopefully.  It's good to have redundant sites like you would with anything. And these guys know that, too. Having DNS revoked is another great way to take it down. I'm sure we've all read about Microsoft earlier this year, pretty much neutering the Walladeck spam botnet where they had to get a court order to remove, I think it was 277 domains that was being used with it. And then since it got down, I don't know if it's come back or not, but that was a great win for them to really stop that one right in its tracks. So that can be kind of hard to do, though, depending on how the registrar wants to work with you. If they're not too friendly, if they're not good to work with, then that might be almost impossibly untaken down, especially if they're ones focusing on providing services to people doing this kind of stuff. And that also would include things like no IP and other dynamic DNS posters. Those guys can be good to work with, too, because they can just go in and remove the entries they have. So if you have them as people come across the botnet using them, I encourage you to go talk to the people prior to the DNS there and get it removed. There's always a case, some jerk, someone takes it over, that happens. It gets taken down that way, it's valid. And then there's other cases where the IP of your command and control server just gets banned or blocked or something like that.  And then there actually are people that do that.  I hope not.   They post interesting things once in a while. Earlier this year there was someone on the Tweebot, I think it was the Twitter botnet command and control thing on there that made a lot of press bloggers posted about it. And it was terrible and that's really the best thing you get from here. And I love this one page right here I have an excerpt of. Visit the URL at the bottom for a good laugh, actually. This is instructions on how to set up the Medias Delphi DDoS client, which is pretty much what it sounds like. So DDoS botnet tool that you can just go make your botnet and part of the tutorial here says this is going to be based off of a Linksys router. If you don't have a Linksys, go to portforward.com and look for your router. So clearly these are people who are underskilled but if they actually follow this and no one pays attention then they can do some good damage, but hopefully they don't catch onto better ways to do that. So these guys are terrible. So this is what I think about people actually hosting off using that site and everything. Ali said my pen isn't a goat. That's not too funny, right? So we have all these ways I can get taken down. That's no good. What can we do about this? Well, let's see what we can do with Tor. I mentioned hidden services earlier. I'm going to explain them a little bit more here. So what is a hidden service? Well, they've been in Tor since 2004 and what they do is allow a user to run a server anonymously. When you do this through Tor you get a domain with a .onion TLB and the domain itself is just a randomly generated hash. There's more to it than that, but it's essentially a hash.onion is what you would see and that would be the URL for your server. And these are only routable through Tor.  If you go through Tor and use an HTTP proxy or some other ways then you'll actually have it. It'll actually resolve and you'll be able to catch the server just fine. Now what's a hidden service? It's a network where you can run Tor. So if you have a box that's natted behind something behind a firewall somewhere where it just can't be accessed from the internet directly, you can spin this up and actually get right through it because it goes directly through Tor. This means there's no need to expose anything to the network. If you have a web server on a box you don't need to open any ports or anything or have it even locally on the network you can block it off completely. Two catches with this. A lot of the web command control panels are kind of poorly written. A lot of them are just PHP applications and we all know there's not many problems with PHP. So there's a few bit of research done a couple months ago. I actually don't have notes on who did it. But it was about they actually founded several vulnerabilities in many of the web control panels for I think there were the web exploitation toolkits. I don't know if Eleanor was one of the things of that nature. If you're hosting something like that on a hidden service here, be careful because you may expose your IP inadvertently or if somebody can drop like a C99 shell on there and then you're really screwed. One thing I like to do when I'm doing things about hidden services is make sure my host box itself is behind a Tor transparent proxy. So if somebody does do something where they try to expose my IP, hopefully they're just going to get some Tor exit notes somewhere but that's a whole other thing. So hidden services, I'm not going to do them justice for how I could explain them. The Tor guys have this stuff, have excellent, excellent documentation on hidden services. So I really encourage you to go to the Tor project website. The URL is up there but it's really easy to find if you search for it and check it out. They have great documentation both on how it actually works in implementation and how to configure it. I'll give my two or three line explanation of it which probably isn't true. Essentially when you start a hidden service it advertises to the Tor network and uses a public key in order to communicate with relays. The first relay it communicates with will be this induction point to the network. Essentially what that means is if somebody wants to get to your box they have to get to him ultimately to get to your hidden service. If anybody connects to the Tor network they're going to go through and say hey I'm looking for this dot onion domain here. Ultimately someone will say I don't want to go. That's a really poor explanation but that hopefully gives you an idea of how this all kind of works. Not really kind of. Just to show you how simple this is to set up. I have a couple lines from the Tor RC sample they provide that shows you all it takes to set up a hidden service. There's two parts. There's a hidden service directory which is important because that's where it gives you the actual hostname for your new hidden service server and the private key so people know to communicate with it, be able to trust it and be able to use it ultimately. The other line is the hidden service port. This is very simple. It's just like creating a firewall rule for many different firewalls out there. You provide it the port you want to run on. In this case they're using 80 so I can pretty much assume it's a web server and the web server itself on the system is running on local host port 5222. Once you just put those in your C file, restart Tor and then everything will work just fine. There's one paper I want to mention called Locating Hidden Services by I'm going to butcher their names Overlier and Cyberson. I'm sorry, I butcher them. I really recommend checking out this paper. It's a very good paper taught that they did a few years ago regarding introducing malicious Tor nodes into the network to try to actually expose the hidden services or the servers running hidden services directly. It's a pretty long paper I would actually encourage you to check it out if you plan on using hidden services just to be aware of the risks that actually could come into play. It's a few years old nodes, I'm not sure if it's all 100% accurate but I think it's still worth a look because it's probably not far from where we are today. If anyone knows any further on that and wants to correct me, please do because I haven't looked at that too much at all. I'm going to change gears here for a little bit. So I love this image because it pretty much sums up how I feel about when you combine Tor and Zeus. If you can't see it too well that's a skyscraper sized Chuck Norris fighting a equally huge Mr. T with the caption of God never intended for these two to meet. So just to give you a little background in case you're not familiar with Zeus or Zbot or WNS poem or whatever your AV company decides to call it. It truly is the number one crimeware toolkit in use today. Actually I'm going to go to my next slide early. Danchev made this great tweet the other day or last month actually saying that there's a monoculture in the cyber crime ecosystem thanks to Zeus and he's very much right. There's everything you see is Zeus and if it's not Zeus it's probably just cool face or one of the other big ones and then a whole bunch of random stuff. If you look at the volume of Zeus out there it's just absolutely ridiculous and the important part about it is it isn't a single botnet in itself it's a toolkit that's used by many people whether they purchase it directly from the Zeus authors, whether they've found a leaked or stolen version that they're using which is very popular by everybody setting up their own servers themselves their own command and control servers and making their own bots on their own and distributing these however they see fit. Often times when I read about like oh it's a new Zeus campaign there's a whole new group doing it. It's really hard to attribute who's doing what with the different Zeus campaigns going on out there because there's so many of them but I would say that outside of the few big ones we've heard of like the never botnet earlier this year which is just one organization's Zeus campaign and some of the other big ones whose names I don't really recall right now there's probably a lot more people doing it than it sounds like so I would really really pay attention to that when you're reading the news and be aware that there's more than just one net out there called Zeus but what it is is it's primarily focused on stealing banking info it can steal anything you want whenever I demo it I have it stealing a sock puppet hotmail account which works just fine it can configure it to steal from any website but pretty much everybody who uses it is trying to steal banking information and it's really easy to configure anybody who is familiar with HTML really can customize it to do whatever they want they have these things like a web inject so what it does is it intercepts the HTML being read so you can say oh well I see the Bank of America username and password throw in a field for the debit card number and the CVV so I can get that too so they can log in and it really just takes that data it looks seamless on the page and reports back to the user they do a lot of updates to make sure the stuff keeps working and works well and it really does it a lot of data is stolen through Zeus every day so to get back to more how we're going to be using this here's a sample configuration file from version of Zeus 1,2,4,2 it's a little older now but it's still pretty relevant there's four lines here that are of interest to us they're the URL lines config compip loader and server this is how you normally set it up for a normal Zeus configuration with the default parameters I'm using the domain of badguywallmart.com because that's where everybody goes to buy their malware and their toolkits and then we have a couple things in there the config.bin is the configuration file where the bot will go update itself and get more information for what it's supposed to do and gate.php is the actual command and control page where bots will check in and let the command and control server know I'm alive here I am here's my information here's some data stuff like that so we're just to our command let's get back to where we're supposed to be with this Zeus on its own doesn't support proxies we can't just say oh just go to the dot onion domain in our hidden service that doesn't work at all and it sues only allows for regular URLs pretty much anything you can hit normally with your web browser is what it's looking for it doesn't have any kind of proxy support not windows proxy or anything so we need a little intermediary solution here and there is one that is free and works pretty well it's called tor2web at tor2web.com what this is, it's not a part it's not affiliated with the tor project at all it's a third party tool put up by some individuals whose names I've neglected to include on the slide they're at the bottom of the web page if you want to check it out and what it is is a web page that will redirect requests made to tor2web.com with the right dot onion hash and they'll send it along through tor themselves and return you the results just like any other proxy and it also provides scripts so you can set one up on your own so if you say well I like tor2web but I don't trust them I'm going to stand up my own and do all this myself it's pretty easy to do it's just a couple of configuration options Friboxy, Squid, Tor obviously and one script they provide and that's about it so what we're going to be doing using this is we're going to be doing the command to control over tor2web so what we want to do in the Zeus configuration we just saw a couple slides ago is configure the bot to connect to that URL there so what you'll see is the first part of it is the hash from the dot onion domain tor2web.com so that would be if that's the right hash that would be your command to control server so what will happen is the bot will connect to tor2web because it just sees it as a regular URL and then be directed through them to the hidden service at the dot onion domain which is our command to control server very simple and very effective so as I mentioned here's the main script they have and all it really does is they request to Squid saying hey where it says tor2web.com make that dot onion and go through Tor and then when it gets the results it returns it right back to you really simple, the configuration for it is really hardly more than this script alone so very nice so I'm going to attempt a live demo of how this works I've been fighting with this all day today so I'm not too confident that it will actually work so what pretend it does if it fails I just want to tell you about the setup I'll be using I think that's the right version which is from about mid 2009 give or take it's an older version now but it's one that's been leaked and it's easy to find on the internet so you can just go and find a copy and make your own botnet that's nice and convenient for the command to control server I'm just using a regular Ubuntu server setup with the lint package installed I'll be running a hidden service on port 80 nothing too special just like any other web server for the host I'll be building and executing I'll be using windows XP sp2 I'll just go through the configuration files on there and if this all happens we'll log into the control panel and see a bot that has gone through, tore through, tore to web to get there so I expect this to fail but we'll see so here's that I have to get on the network first this is where I've been having problems all day as I've been disconnected from the network I've been having big problems getting everything to work right so bear with me for a moment here this is really exciting if I don't connect in a full short time we'll just pretend it all worked and in the meantime I'll show you the configuration file so this is the configuration file hopefully we'll be using is that okay? that's probably a bit big alright so here we have the same thing we saw before with the config and server but what we have here is simply just putting in the tore to web URL nothing too fancy, nothing that exciting but it's effective and am I connecting at all? so what I've done earlier is I've actually built the right version this is the Zeus builder for version 1242 it was off by one the current versions look very similar to this if you hadn't seen it before this is what they're paying for a brand for this is in the web control panel it's a nice thing too where if you actually have Zeus installed on the system which they consider spyware you can click a button and remove it right from the system but I'm clean fortunately and this is the builder very easy, you just click build config and that builds the config file which we saw in the configuration file just load that up onto the Zeus command and control server I've done that ahead of time but it needs that to know where to go download it doesn't even have to be on the same site that you're actually hosting the control panel on it just has to be available somewhere for it to download on another box somewhere and put your config file there as long as you have the right URLs it will know where to go to pick it up and then when you build the loader this actually builds the bioexecutable itself oh I'm on the network let's see if we can do this so as you see here it's probably really hard to read but we have the URL config and the URL comp.IP where we have the torto web URLs we saw before so it knows where it's going to work so I'm going to execute the bot now so you can confirm where the builder says oh we have version 1, 2, 4, 2 installed fancy that we'll go into Firefox and see if we can get to the control panel if we do then there's probably a good chance this worked if we don't then it will so we'll give this a moment so it is ultimately going through Tor so it isn't the fastest in the world Tor has gone a lot better recently if you haven't used it much you're still giving a performance overhead but really the way I look at it is there's a risk to pay for actual anonymity and definitely worthwhile this will probably work best if you're using a smaller botnet maybe a couple hundred hosts but if you have a much larger one then this probably won't work out to you where you have a single host hosting all your bots so we'll give that a moment and see if that works probably not actually we'll just come back to that later we'll move on I'm sure that will fail when we go back to it but let's assume it did work for now so there's strengths and weaknesses to this approach the strengths are like I said, how high is the command of control server the only way you're going to find that out is if you can actually use some sort of attack like presenting that paper I referenced earlier or have some way to get into the server itself make it expose its IP which that's going to be pretty hard to do I think it'll be really hard to track down as a result you won't know where you're looking for it so with this being the case hopefully the command of control server is virtually immune to being taken down I'm sure you've all thought about this ahead of time it's really easy to filter this traffic if you have any kind of HTTP filter or even block the IPs that are hosting it at you're not going to be able to use this method this is going to be really easy to get to take it out and also trust, like I mentioned you don't know what they're logging at if they're logging anything I would hope they're not by the way they're presenting their service but you don't know that you probably don't want someone knowing where all of the bots in your botnet are coming from really easily and running your own toward a web proxy is definitely a better option it's not really hard to do but you need to have some place to run it if I had some bulletproof hosting somewhere and I wanted to do this that's probably where I'd consider running it and probably not anywhere else because I'd still have to give it a domain or at least have an IP to point at and that's still a single point of failure it could be taken down and then you're back to square one but you would have seen if this worked with the Zeus control panel saying we have one bot but just pretend that's the case I apologize for that, it works much better when I'm on a more stable network but with this technique I want to rate this as I'm happy with it I think it's a good solution especially if you're using a toolkit where you can't really control what's going on but I'm not going to let you know I'm happy it's okay, it's not a great solution you can do much better than that if you try something around with this the next thing that popped into my head was well, what if I use the Windows proxy settings that'll be pretty easy I can just load Tor onto the system in a polipo or whatever you want to use per voxy and pretty much drop it on like you would any other piece of malware along with my fake antivirus I'll just drop Tor on there and run it however I need it to be run and then just set the Windows configuration to use a proxy we have the registry keys right there and then we have the port and you get to go the problem with this is this is going to be very obvious to the user the first time they go to Google they're probably going to end up at the Czech Google or the German Google and they're going to be like I don't understand this language that's not good call up their ISP, something's wrong that would be terrible, you'll be found in no time so this idea I just tabled really quick do not want at all so what's the best solution here the best solution is to actually do some work I don't know any bots today or any malware in general that actually supports using proxies if you know of any I'd love to know at any toolkits especially because it'd be great to use an example for this but we need to have some way to resolve the .onion domains so they can connect directly to the hidden service so a few ways you can resolve the .onion domains actually we would have to load Tor like we saw in the previous example and yeah you could load per voxy or pull it if you wanted to there's a functionality called map address which is a I don't know if it's still a considerable experimental option in Tor but it wasn't all the documentation I saw where you can put into your the option map address give it a local IP like <IP_ADDRESS> and the onion URL you want it to go to and then you can just reference that local IP and go to it directly so you don't need to have any kind of middleman to actually resolve the .onion domains for you so you'll probably want to be accessing a limited amount of .onion domains as it is anyways so what we'll have to do in order to make our bots do this is add in at least Sox 5 support or I guess you could use Sox 4a if you really wanted to and that'll be a bit of work it's not trivial but it's not too hard to add in so the bot authors will have to step up their game a bit and actually provide this kind of support into their bots and that's what I like about this the traffic is going directly from the host to the destination and tour there's no middleman like we saw with Torta Web there's nothing you have to worry about there it's going to go straight from your browser to the tour proxy to the rendezvous point to the hidden service and right to the web server itself you're not using exit nodes you're not involving anything else where your data could be sniffed so it's going to be very hard for IDS to pick this up and this works for more than just HTTP where Torta Web was really just for this will work for IRC, this will work for pretty much any protocol you can think of if you want to roll your own custom command control protocol this will work just fine and I think this would be very hard to stop I was trying to cope with what the options for this would be and I really only came up with two won't it be just to block tour traffic like we see some countries trying to do and I don't think that will actually work too well with this I just don't see there'll be a lot of rules being in place a lot of people trying to block tour I just don't see people wanting to do that this would be considering tour to be a virus I actually ran the tour binary through a virus tour we'll see if anybody was doing this about a month ago and no one was so that's good because it isn't a virus but I wouldn't be shocked if a result of that if some people aren't now I haven't checked since then but I just want to see either one of those happening on a large scale to have any kind of impacts where a bot that would still be reachable or possibly able to check in with their command and control server now I do see some weaknesses with this too it's going to require code to be added to bots so say take Zeus for example they're not just going to be able to plug it in right away they're going to have to probably build in as a new feature request for a new version and do it that way so and this isn't really accessible to people who are buying it today either if you're just buying the kit you have no idea how to code most likely or if you do it's not in C or whatever language Zeus has actually coded in and like I said earlier we're going to have to load tour on the system and run it where that's not hard to do it's still another step that will have to be taken in order for it to actually work so it's another thing to have to worry about if you're not loading the malware on yourself if you're paying someone to do it well you're going to have to bundle things up nicely and see if they will do it for you properly and then probably the biggest weakness with this would be if you're looking for any kind of anomalies in your network or looking for traffic changes because while you won't be able to see the actual command and control traffic itself you're probably going to notice some bandwidth utilization increases on servers that are actually doing it and whatnot so that's probably a that would probably be the best way to pick it up I don't know how many people are actually doing this today I know a lot of large corporations are and a lot of them are so it's probably a hit or miss way to check it out and some of the changes if you're doing let's just say using a hidden service for a spearfishing campaign and you're using a service and size of network that you don't actually have access to it might be such a little volume you would never really get picked up so that could be a problem so for this solution I give this my favorite image where it's just complete overjoyed Pokemon hugging crying they're so happy so I would say if you try to take this approach you'll have a very low risk of being taken down probably close to none unless people are just extremely attentive to their own networks so that's how much I love it that's us hugging in happiness so one thing I didn't want to get into too much here but it still is worth mentioning our private tour networks setting up a private tour network is pretty neat it's a bit of an involved process right now you have your own directory authority and a whole lot of other stuff but it's great if you're really paranoid and want to stay off the public tour network if you're afraid someone somewhere might figure out what you're doing the nice thing about this too is it can actually be significantly faster than the public tour network as well you can track the hosts you're infecting looking for how their bandwidth is you can just do simple checks maybe some of those speed tests you can find out how good a connection is that can be one of my relays and keep your network nice and performing really well as a result of that and also blocking a private network will be significantly harder there's no list of exit nodes that will be polished there's nothing that people will know unless they actually go and investigate the network themselves so it'll be significantly harder to take down I don't see how a smaller network like this unless somebody went after it directly and really paid a lot of attention to what you're doing to actually be able to take it down and talk about some other features that hidden services give us that actually makes this a really nice way to manage your command and control server so as we mentioned much earlier tour uses public keys to communicate so let it know where to let the tour network know how to get to the server when it does that it creates a private key on the server as well as the hostname for the .onion domain and puts that on the system that the hidden service is running on so what's nice about this is these are just files on the system you can copy these and move these wherever you want and make it so if the server actually goes down for some reason you can re-attribute it to another and another nice thing too is you can generate a lot of these keys up front if you're on a script and just say hey, keep clearing out that directory and keep restarting tour it'll just keep creating new keys for you until you have as many as you like so would this be the case so like we saw earlier in the tour to web example that should have worked we had the one hash that was the hidden service .onion domain itself so what we could do with this is easily move this from one server to another we could just copy the files, move it from the hidden service directory on one server to another restart tour and now we have the bots don't know any difference but they're still communicating with a new server so that's pretty nice this allows us to keep our bot up and running much, much longer than we would otherwise and while there's a chance that if we move it and if we move it frequently we might lose some data that was captured that we never actually recovered from one host that we moved from and that's a really small price to pay in order to keep the bots phoning home and actually communicating with you and another nice thing too would be to issue multiple onion domains for your command and control or presumably set up multiple command and control servers in order for tour to connect back to it and not have to worry if one gets taken down and isn't able to reach that day but this also could be a nice misdirection technique where you could give the appearance that the botnet is significantly larger than it is especially if you swap domains in and out we saw something like this with the ASprox botnet like I mentioned earlier where every few days or so they would swap in a new domain for their command and control and age older ones out because the older ones if they weren't taken down by the registrar themselves sometimes they were taken over sometimes they just didn't work functional anymore I don't know if the people running the botnet actually took them down themselves or not really quickly and the older ones were pretty worthless after a couple weeks so we could do a similar thing here where we can leave people long saying here's our command and control and then every few days put in a new den on your domain and inform the bots here's where you're connecting now and since we can generate as many as we want we don't have any limitations like doing with registrars or anything, we can just generate tons and tons of these, roll them all out maybe only use a couple but then people have to watch them all and be aware of what's going on similar to how we saw our configure work and only a couple of them will be registered maybe not even every day and be used to communicate so we can do it in a nice similar scenario like that with this here pretty much for free so we talked about having your bots running toward themselves in the best case scenario so if we have to our on there we could do a lot more interesting stuff like running hidden services locally if you were familiar with Zeus's back connect model this allows people to connect back to an effective Zeus host over IP, remote desktop, VNC you can even run a web server if you wanted to and have it behind a hidden service on the infected box what's nice with this is you can have it do a whole lot of things with the Zeus back connect model they use that to connect to a host that's been infected in order to make use of certificates in the browser for online banking so what they do is they'll have people log into a remote desktop on a host and say okay well I know I can log into your bank account if I have you using my password then it really doesn't matter your bank is going to accept me as it is so and also another nice thing you can do is actually use this to distribute updates for your botnet if every host you have infected is a web server and hidden behind a hidden service you can just say okay well here's the news of the hidden services to have the updates we're going to have you connect out to these guys get your update and with that update we'll have more hosts that are doing it providing updates for tomorrow or the next update whenever that may be so it's a nice way you could actually model your botnet around Tor itself and use the hidden services to your advantage and ultimately like I mentioned earlier NAT is of no concern here if you have a host infected behind a browser or a firewall or whatever if it's talking on Tor it doesn't matter it can do this so a few other thoughts since we're all running Tor how would it be to turn them all into relays? this is just something to pose out there to see what people think there's an increased bandwidth in Tor overall especially if you have a pretty sizable botnet I don't know if it'd be worth it or not but it could be pretty interesting to see and this could have really positive effects for your botnet if you can actually increase the speed of Tor in any significant way that'd be an awfully large botnet but that could be a neat project to do if you actually have that kind of resource available and on the other side how about turning them all into exit nodes I thought about this for quite a while to say okay this actually makes sense it could be cool if you have a majority of Tor exit nodes and actually be able to control traffic or sniff the traffic going through so a few years ago with the people finding embassy emails and other documents by sniffing Tor exit nodes which is of course a bad thing to do I wouldn't encourage it but it's probably not a good idea as in tasting as that may be for what you may learn you'll be exposing the identities of your bots so I would really recommend against that you don't want them popping up on the Tor exit node list and having a lot of attention being drawn to you as a result especially if they all start to go up with a pan that really takes off one day your botnet increases by a couple thousand hosts and this happens to be a couple thousand exit nodes that stand up that day it'd be pretty obvious I don't think that's a very good idea so get to the conclusion here as we almost saw with the live demo it's pretty trivial to get existing HTTP bots working with Tor there's a risk to it but if you're really desperate and you really want to keep the host of command and control server hidden it's a pretty easy one to set up too if you're able to get Tor up and running on your server and it's possible to get a lot more protection easily if you actually have the source to the bots by adding in sock support so it's just really a nice alternative to have this of course isn't really something everybody's going to do but if you can do it it would be really nice to have so you can protect yourselves keeping a command and control server up is easier if you do this hopefully having it anonymous would mean you're less of a target or if you are a target you're less of a chance of finding and taking you down and actually controlling bots with a hidden service like we talked about with the back connect stuff would be pretty beneficial this would be something that I think a lot of bot authors out there would be interested in providing for really no additional cost so and on the other side defense is this I hope that you can see that they do exist it might involve looking at your network and looking at your data more than before or a little differently than before and it's probably not going to be easy to find this stuff finding the Tor to Web stuff will be easy but finding you probably won't be so I would actually advise you to check things out keep your eye open for this stuff and if you actually find anything let's talk about it let's see what happens and try to find out how people are actually doing this stuff so that's all I have here I'll be happy Q&A I don't have much time left here I'll be in the room across the hall definitely and if you want to contact me otherwise there's my contact info and that's all I've got


Okay, so I have a second channel as many of you probably know That mainly focuses on hardware where this channel I'm trying to primarily focus on software sometimes those things overlap though I'm doing a series currently where I'm getting serial connections into small arm devices routers modems such as that and so far I'm working with a pogo plug device, which is very very cheap And I'm using a pogo plug mobile which has been discontinued and get them for seven bucks on Amazon currently shipped to your house So we've got a Connection that I'm actually connected in through the network to it now because we set up real connections to it and The main point of a pogo plug device is that it has USB and SD card slots To where you can use it for file storage and normally you would use the pogo plug service So you basically it's a cloud at your house That is using services online so that you have basically your own cloud at home But we don't want to be dependent on their services the pogo plug services So in previous videos, which are done on my second channel, which there should be a link in the description of this to a full playlist So basically I'm this is part of a playlist for my second channel that I'm doing over here because it's mainly software related But we want to be able to share Files remotely so we're gonna set up a basic web server We already have in my last video set up busybox This is something I've done on this channel before before I have my hardware channel Done hardware videos and I've talked a lot about busybox and setting up HTTPD One of the things I didn't go over them because I didn't know how then was setting up an index list For the files that we have so I can set up a web server But it wouldn't be like with a patch here something or even with Python simple HTTP You would go and it would give you a list of directories if there was no index files Well, how do you do that? With busybox and the answer is you create a CGI dash bin folder where you put your executable scripts And if you name one index dot CGI if there's not an index HTML file in the folder It will default to the CGI one well I've actually already have created a nice little looking one and put it up on github So let's go ahead and have a look at this so so far in this series. We've Mounted our USB and our SD card, so I'm gonna go ahead and go to my SD card now So again, I'm logged in remotely to my Pogo plug, so I'm gonna move into my empty MNT folder my SD card folder and here I have some files, but let's say I want to Share some of these files, so I'm gonna make a folder that will be my web directory on this device I was called at the BWW here on my SD card and move into that folder and in here I can say HTTP D which is using the busybox's built-in HTTP server and I'm gonna go You can tell what port you want. Well, let me hit enter. Oh, I guess I thought it would give me the help file So it basically I just started the web server in this folder already without giving any options So theoretically I should be able to go To my web browser here and refresh this and you can see it says file not found And that's because there's there's no files in there, but it definitely defined an index file So if I go back here, and I'll use vi and I'll create an index dot HTML and I'll just say hello Instead of hello world just because I'm lazy and I hit f5 here now. It's defaulting to that HTML file That's great, but let's say I have a bunch of files in here I just want to you know, I'll just touch a few touch one touch two Touch three I come back here It's still I'm just gonna see my oh in my hello folder or file and if I remove my index file I'm gonna get a file not found Well, again, we can create an index file by creating a CGI folder and putting an index dot CGI script in there That actually lists out stuff and again I've already created one and if you go to my github page Which is github.com forward slash metal x1000 also reminder in the description this video I have notes to everything I'm doing in this series with this pogo plug and notes to this part are also in there As well as links, but github.com forward slash middle x1000 will bring you to all my repositories currently have 115 apparently I just I throw everything online I go to repositories here, and I'm just gonna type in index and you'll find one It's called directory index for HTTPD and you'll see that it says directory index for busy boxes HTTPD And if you go in here, it basically has the license to read me a test folder Would just some basic little files and folders in it to test out and then we have our CGI File in here, and this is basically what looks like it basically generates some HTML code and Then it uses it's a shell script that basically lists all The files into that HTML code so basically there's some some shell script right in the middle of our HTML file here So you can look that over, but the way you use this if you just want to use it is You can go ahead and clone it or download a zip file as I mentioned in the previous video Currently we're running running busybox on this server, which has W get a W get that doesn't support SSL certificates So unfortunately, I can't download directly from this web server because it all forwards to SSL which is great HTTPS So what I did I just downloaded this file right here This index is Apache running on my desktop computer and right here this master file I'm pretty sure if I remember correctly is the file that I need to download that contains that project So let me go back To my pogo plug here. I am going to Back out and I'm just going to remove that that that directory I just created and now I'm going to say W get and I'm going to download that file from my desktop <IP_ADDRESS> Ford slash metal x 1000 Ford slash master zip Boom, I've downloaded it and now I just need to unzip master dot zip And it's created a directory called directory index For HTTP and we're just going to rename that we'll move that to be WWW and So now we have our WWW folder. I can move into WWW and list out and you can see it's that project. We just downloaded Also, if I PS you can see our HTTP server still running. I'm just going to kill that process Yes, again, make sure it's dead. Okay, so now that I'm inside my HTTP or my I'm sorry my WWW folder the folder. I want to be a web server again I just have to type in HTTP D and hit enter and My web server is back up and running and if I come here and I refresh I Get a nice little looking index of all the files and I can go in my test folder here and see there There's another directory here. I click on a picture and open up the picture So this is all running on the pogo plug If I come in here and I start creating new files, so I'll just touch one touch two touch three And I go back to my web directory here I can refresh and there are those files there They're empty and since they're not HTML files that just downloaded an empty file about let me create a new file I'll call it test.html Vi so I'm gonna use Vi which is a built-in text editor in busybox Similar to Vim and I am going to just say I'll make a hitter. I'll say hello world I'll save that and now if I go back to my web browser and refresh There it is test.html when I click it it brings me to that file So setting up a web server simple all you have to do is go into that folder type in HTTP D And you have a web server running if you want executable scripts You put them in a CGI folder and make scripts and make them executable If you want To have a directory index just download the file I created or just look at it and learn enough to make your own It's actually really really simple But that's it other things you might think want to think about is if we do HTTP D dash dash help me Help maybe there we go and there's also a good man file online if you just Google search busybox HTTP D the first thing that comes up will be Probably this open WRT wiki Tells you everything you need to know gives you example codes And I have videos on this as well if you just you know go to my website, which is films by Chris comm Go down to videos and type in HTTP D you can actually find a number of videos I have talking about this subject where I actually have this running on other little devices Where I go over Putting password password protecting your your server you can also put it on different ports So by default it's obviously gonna go to port 80 But you can do dash P and put it on another and you know more than one server running So actually let's do that.  I'm going here and I can go into my directory folder and I can HTTP D dash P and I'll say port 8000 now I go back to my web browser here So if I just type in the IP address to my device I get my index here that I can go through and look at all the different files But if I wanted to access the other one, I just change the port so I say colon eight zero zero zero I'll hit enter ha so now this is the stuff on my USB port my USB drive again. I can touch one two three And there they are So I can have I can have many many web servers. They're web servers as Especially this busy box one are so lightweight. I mean think about it It's part of the busy box binary and the entire binary which has All of these programs built into it It's only 1.1 megabytes for this compile of it Some compiles of it with all these in it are slightly less than a megabyte running web server is not Strainful on your smell security you have to keep in mind, but as far as System processes. I mean unless you're running Facebook or something if you just doing something for yourself co-workers or family It's nothing And you can start multiple instances and I can should be able to kill all HTTPd and my ps they they should all be dead now So if I try refreshing this that server doesn't exist if I remove the port number that one's killed as well But I can start them back up again now that we've done that we've done all this We want that web server to run every time we this the system starts up So if it gets rebooted for some reason we want to make sure that the web server starts up And if you watch the previous videos in this series if we go into etc Etc, however, you want to say it and it's dot D And then we can Vim. There's a file called. I'm sorry not Vim. I don't have them installed on here RCS capital S we'd enter down at the bottom here You can see that I've added in I have a line for My USB and also the line for my SD card I have that one coming out so I only have one server running the dash H So if you're in a folder and you run HTTPd it starts in that folder or you can specify Which folder you want to be the home folder for your web directory and so here in my startup script I'm just saying start up the web server by default on port 80 And make the home directory this and of course that's after I have already Mounted that directory which we went over in previous videos in this series So again, I'm doing this on a Pogo plug But if you have busy box with HTTPd on any device boom You can start up a web server no problem And if you have space to actually store files think about you know creating an index of course again looking at My github page in the description of this video again There's a link to all my notes on this project for everything and not just this video But all things in this series on the Pogo plug Check it out all the code and links and everything is there. I thank you for watching Please visit films by chris comm and of course That's a good place to look stuff up as I showed you right here You can search through all my videos if you like my videos thinking about supporting over at patreon.com That's patreon.com forward slash malex 1000. I appreciate even a dollar a month is helpful As always, I hope that you have a great day


Hey everybody, it's Mark and we're moving on with our radiographic approach to the heart old school and now we're going to shift gears a little bit and looking at the radiograph in the setting of unequal chamber enlargement. So unequal chamber enlargement when you see it. And you're able to decipher that from the radiograph it usually indicates a valvular abnormality and occasionally a septal defect. And the pulmonary vascular changes are going to be really crucial in this setting of unequal enlargement. So understanding how these chambers enlarge in the pulmonary vascular you can actually come up with a pretty narrow differential or even the diagnosis. So we go back to our concept map, small heart disease, large heart disease, and it refers to outside the end pericardial myocardial and valvular. The small heart disease with valvular we're often talking about stenosis. And with large heart disease with valvular and septal we're often talking about volume overload or insufficiency. So today, or in this one, we're going to look at unequal chamber enlargement. So this is the kind of heart we're going to be talking about the right ventricles enlarged about half. The left atrium is mildly dilated, the left ventricle is normal, unequal heart enlargement usually indicates valvular. So to figure this out, you start trying to figure out which chambers are enlarged and very importantly, what do the pulmonary vessels look like. There tends to be massive dilation of the right or left atria in the setting of insufficiency because of the volume. The ventricles on the other side will also tend to be dilated because volume induces dilation. In the setting of stenosis, there will be mild dilation of the atria because they're less compliant. And the ventricles do not tend to dilate until they tend to get failure. Now, the right ventricle with hypertrophy has nowhere to go, so it tends to crawl up sternum. That's why you get the so-called sternal heave in the setting of right ventricular hypertrophy. Enlarged aorta and pulmonary arteries are also useful in the setting of post-anotic dilation or insufficiency. But when you start, you've got to look at the pulmonary vessels. Is this sephalization or is this shunt vascularity? Now these mean the exact opposite because shunt is just a plethora of blood flow and sephalization is minimal. But you know what? It's really subtle. So where do you look? Well, both of them have upper-low vessels that are dilated. They're enlarged. But when you look at the lower-low vessels, that will help you distinguish. If the lower-low vessels are constricted and small, that is sephalization and chronic compensated heart failure. If the vessels are the same size all the way through, that is shunt vascularity. There's an increased amount of flow. That's your starting point. Then you've got to know where the valves and the chambers are. Well, where are the valves? We haven't really talked about that. Lateral projection? Again, very helpful. So the lateral, you take a look and the anterior heart is going to be the right. The posterior heart is going to be the left. Now, for the right, the anterior-inferior is tricuspid and up here is the pulmonic. They are separate in their anterior. In the back, the aortic and mitral are very closely aligned and almost connected at the annulus. This is how you separate. Look at the sternum, diaphragm border, drawn imaginary line to the hyalum. If the valve plane lies above it, that's the aortic. If it lies below it, that's the mitral. This is the pulmonic valve. Again, it tends to be separated up high in the anterior. Valves can be tough to tell on the AP, so the lateral projection is kind of your go-to on trying to figure that out. So we take a look at this patient. There's no history. You take, well, let's start with the vessels. The vessels are a bit dilated here, and they're constricted here. You can see they're a bit dilated here, but not super, and then they're very constricted here. This is not shunt vascularity. It is an evidence of some sephalization. The main pulmonary artery is large. The pulmonary arteries on the lateral are large. There is pulmonary hypertension. You don't say in gorge vessels or plump, they are large pulmonary arteries, pulmonary hypertension. You look here at the aortic arch, main pulmonary artery, there's your left atrial appendage, double density. You look in the lateral projection, there's your left ventricle, which looks normal, and then you have the left atrial budding out a little bit. On top, that's left atrial enlargement that's mild. The right ventricle is over halfway up on the sternum, and you know this person has a sternum leave. How do you put this all together? This is a patient with a valve in the aortic area, because it's all pushed forward. The mitral would be right here, draw your line, but there is probably a valve there. This is actually going to be mitral stenosis and probably has aortic valve stenosis, chronic pulmonary venous hypertension, pulmonary artery hypertension, core pulmonary. It's all there. What can you say about her childhood? She had rheumatic fever because she had her aortic valve and mitral valve. Pretty good stuff, huh? All on a radiograph. 33-year-old female.  That means that she had surgery when she was young. The right atrial chamber markedly dilated, marked dilation of a usually suggesting sufficiency. Look at the right ventricle. Yep, that's dilated too. So right and left chambers are dilated in sufficiency. The left ventricle and left atrium have a normal convexity and they're normal. One other thing, whenever you see the convexity of the left heart border, that's real gradual. That's not the left ventricle anymore. That's the right ventricle, which tends to rotate because it has no room behind the sternum and it rotates around. What would you say here? This is Epstein's anomaly. This is tricuspid regurgitation.  So very powerful when you know what chambers to look for and how to deduce this. Again, when you see this convex border, that usually means the right ventricle is dilated enough that the heart has rotated and now that forms the left heart border. How about this person? Remember the aortic arch, descending aorta, supravenic cable? Whoops, what's that? The ascending aorta. Remember, you should not see the ascending aorta normally. If you see it and it's tortuous, that's fine, but this doesn't look unfolded. And then when you look in the lateral, you see there's calcification there. What valve is that? Draw a line from the hylum to the sternum, the sternal diaphragmatic border. It lies predominantly above. That's aortic. Aortic valve calcification is strongly associated with aortic stenosis. That's post-denotic dilation of the ascending aorta. 27-year-old. This patient has shunt vascularity. The vessels are all large, no matter where you look. The pulmonary artery is enlarged. The right ventricle is markedly enlarged with a probable sternal heave. The left atrium and ventricle are normal. This is a patient with pulmonary artery hypertension from shunt. Well, where is the shunt, do you think? This is your hint. You look at the left atrial chamber and it's normal. Why is it normal? With all that blood flow coming back, you can see that the left atrium should dilate, but it's not. Why? Because there's an ASD and all of this extra flow coming in the left atrium is just pushed right through the ASD into the right atrium. This patient, pulmonary hypertension, there are his vessels enlargement that's all throughout the left atrium is normal. This is an ASD. If this was a VSD, you would see the left atrial chamber a bit dilated because it has to accommodate all that flow. So, unequal cardiac enlargement. If you see it, play close attention to the pulmonary vasculature, shunt versus sephalization versus normal, and try to deduce based on chamber enlargement what valve or septal defect is probably present. Okay, remember now this is an old school puzzle where you taking the clues and trying to deduce the patient's cardiopulmonary status.


What is going on everybody? This is Tuko from MusicIDTV and this is Use The News. So we recently posted a video called Three Reasons Why Your Last Music Release Failed and got a lot of comments about what the hell is the right way to do it then. So all that I could do was compile my take on the right way based off of research, based off of books, online resources, my own personal experience with my own releases, working with other artists on their releases, on what I think that you might want to know when you release your music. So here is five tips on how to release your music. Number one, reverse engineer your music. Decide where you want your music to live. Is it on playlists? Is it in popular sound cloud communities? Is it on TV and film? Understand where you're trying to go and build a plan to try and get your music to that specific place. It'll determine what decisions you make regarding your distribution, regarding where you put your money and your resources. So you really want to know where you want your music to live in my personal opinion. Number two, define your target demographic. The way I say do this is go by whose music you would probably be most compared to. Look at who their target demographic is and try to build a profile on who that person is. Do they travel a lot? Do they go to live shows? What type of brands do they buy? What are the demographics on this? Who's your target audience? I believe Corey did a digital dash video on this called how to find your audience. So definitely check that video out if you have not. So you can have an idea on how to build a profile on your target demographic. Number three, market test your music. Once you've actually defined who your target demographic is, now it's time to try and test your music with that target demographic, whomever you have access to. Now this could be via personally or via some other method to get people to listen and I would suggest having them rate your music from what they like the most to what they like the least.  You never know if somebody is going to really be into what you do, but at least let them know what they like the most and let them give you their top three. So you have a couple of things in the chamber in case one of them takes off. You know what the other ones might do in the market because you've market tested your music. Trust me, most labels do this. They have these algorithms and these techniques they do to define what they think might be a hit. So it would do you great justice to market test your music. That's one thing I don't think enough of us do and I would greatly suggest doing it. Number four, find your early adopters. Your early adopters are more so people who are open to discovering new music. This could be vloggers, this could be bloggers, influencers, this could be taste makers, anyone who kind of fits into your target demographic but is opening to discovering new music. Reason being you don't want to spend all your money and resources on trying to reach people who only want to hear music they've already heard. Even if they do seem like they fit in your target demographic, you kind of want to look for the early adopters in that target demographic. So a subsector of that is my best suggestion when trying to build with the release of your music. I would definitely suggest focusing more so on early adopters. They'll help everybody else get accustomed to what it is you do. So stay there if you can. Number five, community building. Now, number five, one of the things I feel is just kind of overlooked in a lot of releases. We think that we want our music to do a certain thing or want this attention. Instead of thinking we want this music to serve as a community building, want it to kind of convey what it is we are trying to express with our art and have people buy into that. Once those people buy into that, we always want to have a way of reaching those people again whenever we release new music. So when you release your music, devise some sort of strategy where you're collecting some sort of email list, you're getting them to follow in your social media, you're getting them to follow you on streaming services like Spotify, like Apple Music, which we know can kind of help when it comes to getting considered for playlists and so on and so forth. So I really suggest making sure they follow you on your streaming service if you do none of these other methods. Email list is always something because you can control that as well. So that will be number five, make sure you start to community build with the people who have shown interest in your music. And number six bonus tip, I would say only start to build your team after you've started to gain some traction. One thing I've learned is that people will help you when you don't need their help. People will help you when you no longer need help in that specific field. So a lot of us need marketing, we may not be great at marketing, it may not be a strong suit of ours, but I would definitely suggest trying to learn marketing as best as you can, because if you were to work with someone else in marketing, and you had no clue if they were doing a great job or not, you would just only waste your time or your money and or resources. So be sure you can define what it is you're working with when you're trying to acquire a team. You need to have some knowledge of what their role and position should be. So you can really have a clear idea of what your expectations should be and see if they meet those. I know it's a little long, but I had to give you all a response to all the comments saying what's the right way to do it.  Of course, get research feedback on how these methods work adjust and work from there, but this is just a good start, a good mind space. Focus on who you're trying to reach, focus on where you want your music to live, how people get there, how people discover that music, and focus on continuously trying to reach them with the music they want to hear from you. That's it, and that's all beyond that. I am Tuko. You can follow me on Instagram at Tuko. I am. And for more videos like this, share with the friend, like, and subscribe, and I'll catch you in the next bitch out.


Okay. The next talk is about malleable proof systems and applications and Sarah is giving the talk. So hi. I'm Sarah and I'm going to be talking about a primitive called malleable proof systems and some of their applications. And this is joint work with Melissa Chase, Markels Kulweis and Anna Lisanskaya. All right. So I'm going to start out with a bit of motivation. In fact, what I'm first going to do is motivate the opposite of what I'm talking about a little and that is non-malleable cryptography. Okay. So 20 years ago, starting with its introduction by Dolav Dworkin-Neyor, we really saw this strong emphasis on non-malleable cryptography. So kind of why is that? What is that? So let's imagine we have some user Rob and Bob wants to go talk to his bank. And Bob, let's say, has $100 with the bank, but he owes Alice some money. So he wants to transfer $10 to Alice. Okay. So one way we could think about doing this is Bob encrypts this message under the bank's public key so that only the bank can decrypt it. And he then starts to send that ciphertext over to the bank. So potentially, as that ciphertext is in transit, it might be the case that Alice jumps on the wire and sees this ciphertext going by. And Alice can say, well, okay, I don't actually know how to decrypt this ciphertext. I'm not the bank. But I do know that I have $0 right now. And so whatever Bob is giving me, I want 100 times more. So if this ciphertext is what we call malleable, then what Alice can do is she can maul this ciphertext using this multiply by 100 operation. And she can validly encrypt this message, transfer $1,000 to Alice. Okay? That's then what kind of the bank receives. The bank decrypts it, carries out this transfer, and, you know, Bob is left completely in the dark. Okay? So from a security standpoint, non-malleable cryptography says that that can't happen, essentially. Okay? So that no mauling of the ciphertext can take place. And therefore, that seems quite desirable from a security standpoint. Nevertheless, we've seen this real shift recently towards malleable cryptography. Okay? So one prominent example is the recent line of work on fully hemomorphic encryption initiated by Gentry. We've also seen examples looking at malleability as a feature for proofs. So by Belenki et al., Dodis et al., and Fuchsbauer. And we've also seen examples looking at malleability for signatures. So Bonnet Freeman and very recently on et al. So kind of if the security of non-malleable cryptography seems so great, why malleable? So one quick example here. Let's imagine we have some cloud storage provider. And we have some user Alice, okay? And Alice has just some huge chunk of data, some huge database. So rather than kind of keep that around on her local machine, what she can do is she can send it over to the cloud storage provider. And maybe she doesn't completely trust them, so she encrypts it first before she stores it. Okay? So nevertheless, Alice might someday wonder, you know, well, what's the average of all those MIs? Okay? If she authorizes the cloud storage provider to compute this averaging function over that data, again, without decrypting it, just computing the average over the ciphertext, then what it can do is it can send back this one ciphertext, right, encrypting the average value, and that saves Alice kind of this huge computational burden, right? Because all she has to do is decrypt. So this has applications in things like outsourcing computation, cloud storage, et cetera. Okay? So this kind of demonstrates that although non-malleable cryptography had all these desirable security features, malleable cryptography is really desirable from a functional standpoint. Okay? So our contributions are in this middle area that we call controlled malleability. And what this does is kind of compromise the security features of non-malleable cryptography with the functionality of malleable cryptography. So two examples of work in this area include the notion of HCCA security for encryption by Prabhakaran and Rosselek, and also the recent notion of targeted malleability by Bonaiseg Evan Waters, again, for encryption. So kind of relating these back to the examples. In the cloud example, if we somehow can guarantee that the only transformation that this cloud storage provider can compute on our data is this averaging function, then it somehow seems less risky to go store all our data with them. Similarly in that bank account example, right, if we know that by mauling the ciphertext, all you can ever do is decrease the amount in it, instead of increase it, then again we've kind of prevented the attack that we saw. So for our contributions in this work, we switch our attention to proofs, and we define the first notion of both uncontrolled and controlled malleability for proofs. We then give two applications. One is a strong notion of encryption security that we call CMCCA security, so this is similar to these previous two notions, except we'll see we obtain a really nice modular construction, and the other application is shrinking the size of verifiable shuffles to get what we call a compactly verifiable shuffle. And then just to make sure we can actually instantiate these proofs, we examine malleability within existing proof systems. So just an outline for the rest of the talk, I'll start off with some definitions. I'll then give our construction of what we call a controlled malleable NISIC, or CMNISIC. I'll then give those two applications I mentioned, and finally I'll just wrap things up. So diving in with the definitions, unfortunately for the sake of time, I do have to assume some familiarity at least with stuff like zero knowledge and proofs of knowledge. So I'll just start with malleability. So first, kind of to give an example of what I even mean when I say malleability for proofs. Let's imagine that I already have two proofs. So one is a proof pi one, that a given value b1 is a bit, so that means I have a commitment to b1, and I'm proving that it's either a zero or a one. And then I have a similar proof pi two that a different value b2 is also a bit. So logically, I know that b1 times b2 must also be a bit, because if I take any bit and I multiply it by any other bit, I'm going to get a bit. So it's not really additional information. So what I'd like is to be able to mull those existing proofs I have to get a new proof of that statement, so without having to go ask the prover for another proof. So more generally, we can say that a proof is malleable with respect to a given transformation t. If there exists some algorithm eval that, given the transformation, the set of previous statements and the set of previous proofs, can output a new proof pi for this transformed statement. All right? So relating this back to the example. The transformation in question is multiplication. The previous statements are b sub i is a bit. And the transformed statement that I want the proof for is that the product of the b sub i is a bit. All right. So one thing we just need to be a little careful about, since we're dealing with zero knowledge and witness indistinguishable proofs, is that we need to make sure the proofs are malleable only with respect to a certain class of transformations. OK? And we call these transformations ones under which the language is closed. So like I was saying with the bits, since I know that any two bits multiplied together yields a bit, we can say that the language of bits is closed under multiplication. So it's not closed under something like addition, right? One plus one is not a bit. So in particular, we can't really have proofs that are malleable with respect to addition, because then this mauling process would completely violate zero knowledge and witness indistinguishability. So that's the kind of basic definition of malleability for proofs. And that's how to reconcile it with zero knowledge. We also want to reconcile malleability with some strong notions of soundness, like a proof of knowledge. OK? So think about a proof of knowledge. It says that, given a proof, I can extract a witness. So it's not clear if we allow for these kind of mauling processes, so you form a proof, you know the witness, but then you give it to me and I can go transform it, but I don't know the witness. So kind of how do we reconcile those two? So what we do is we build off of some existing notions. So we first define an allowable set of transformations, T. These are going to be kind of the only transformations we want you to be able to use. We then look at a strong notion called simulation soundness. So this says that even with access to a simulation oracle that can prove false statements, an adversary still can't do that itself. We then look at this kind of natural extension called simulation sound extractability. This was introduced by Groth in 2006. And this says kind of one step further, well, not only can the adversary not provide these proofs of false statements, but in fact, from any proof the adversary does provide, we can extract a witness. All right? So now, incorporating malleability, we say that, well, if the adversary formed a proof fresh, then we can pull out a witness, but it's also possible that he kind of took one of those simulated proofs and mauled it himself, and in that case he wouldn't know a witness per se. Right? So at a high level, we're going to say that either an extractor can pull out a witness, or what it can pull out is a previously queried statement to the simulator, and then an allowable transformation from that statement to the new one that the adversary is claiming a proof for. Okay? So a bit more formally, we have a game. So in the middle here we have an adversary, and then on the left we have a simulator and an extractor. So first step, the simulator and the extractor are going to jointly generate some parameters. So there's the CRS, sigma, the simulation trapdoor tau sub s, and the extraction trapdoor tau sub e. The adversary then gets to see the CRS and the extraction trapdoor, and now it can start issuing its simulation queries. So what it does is queries the simulator on a statement x sub i, and the simulator responds with some proof pi sub i. Okay? And this database queue here is just so the simulator can keep track of the queries. So at some point after however many interactions, the adversary is going to output its own statement proof pair x and pi, and the extractor is going to pull out this tuple, w, x, prime, and t. Okay? And then the winning conditions really correspond to this intuition I gave. So if we look at this third case, this is just the extractor completely failed to extract anything. That's obviously very bad. So we say the adversary wins if it can do that. Similarly, this first case is really just regular, similar sound extractability. So this says we pulled out a witness, but it turned out to not be a valid witness. So the adversary kind of proved this statement on his own. And this second case is where we really kind of incorporate malleability. So here we say that the extractor pulled out a previously queried statement and an allowable transformation, but actually either the statement wasn't previously queried, it's not in queue. Or the transformation is not actually allowable. Or the new statement wasn't actually derived from the old statement using that transformation, right? So x is not t of x prime. And then what we say is that the proof is cmsse, short for controlled malleable simulation sound extractable, if any adversary A has the most negligible probability in winning this game. And to kind of reduce acronyms for the rest of the talk, if a proof is zero-knowledge, this notion, cmsse, and something we call strongly derivation private, which essentially means that this evaluation algorithm hides the transformation, then we call it a CMNISIC or controlled malleable NISIC. Okay, so I know this definition might be a little to take in all at once. So don't worry, we're going to see it again in one second when I gave the construction of the CMNISIC. Okay, so I'm going to give a generic construction first. And this is going to be by combining malleable, witness indistinguishable proofs of knowledge with unforgeable signatures. So the construction is basically to give a CMNISIC for an instance x and a witness w. What we're going to do is we're going to prove knowledge of the tuple wx prime t and sigma, such that either w is a valid witness for x or sigma is a valid signature on x prime, x was derived from x prime by transformation, and the transformation that was used was allowable. So hopefully this sounds a little familiar at least from the definition. Just to make sure it satisfies the definition, let's go through it. So we have our adversary and we have our simulator. And the trapdoor that we're going to use here is going to be the signing key for the signature scheme. So in the adversary queries on a statement x sub i, what the simulator is going to do is it's going to sign that x sub i. Okay, it's then going to say, so my previous statement was x sub i and I'm deriving x sub i from x sub i using the identity transformation. Okay, so just looking at these conditions we can see that if the identity transformation is allowable, then all of the conditions are satisfied and this is in fact a perfectly valid witness. So now when the adversary outputs its own statement proof pair, we're going to use as the extractor the extractor for the underlying proof, right? And because it's a proof of knowledge, we know this extractor really does exist. So for the game, we want it to pull out this tuple. What it's actually going to pull out, of course, is this tuple with the addition of that sigma, and now we can just make sure that none of the winning conditions can be met. So starting out with the first case, the w we pull out is the meaningful part, but it's not actually valid. Well, we can see that that just violates this underlying condition and thus violates the existence of this extractor that works as it's supposed to. Similarly with a lot of the other cases, if x wasn't properly derived from x prime, then we violate the underlying extractability, if t isn't allowable, we violate the underlying extractability. And of course, if the extractor just fails completely, we again violate the underlying extractability. So the only case that's really left is when the statement wasn't actually previously queried. So now we incorporate the signature. There's two cases here, either the signature doesn't verify, in which case we've just once again violated one of the underlying conditions, or the signature does verify. And then when we violate is the unforgeability of the signature scheme, right? Because the simulator never saw x prime, it's not in its database queue. But nevertheless, the adversary somehow produced a signature on that x prime. All right, so that's kind of how it satisfies CMSSC. And in the paper, you can also see how it satisfies zero knowledge in this strong derivation privacy. So it really is a CMNICIC. In terms of instantiating this efficiently, for the witness indistinguishable proofs, we're gonna use growths of high proofs. That means for the structure preserving, sorry, for the signature, we need to use something called a structure preserving signature, so that we can integrate with growths of high proofs. In fact, if we use an instantiation of structure preserving signatures due to chase and cool vice, then we can actually instantiate our entire CMNICIC based solely on decision linear. In terms of efficiency, the efficiency of the scheme obviously hinges on the efficiency of the primitives. So if we use the chase cool vice structure preserving signatures, maybe not so efficient, hundreds of group elements. If we're willing to make a stronger assumption, then we can get that down by an order of magnitude. And of course, it depends on the representation of the transformation as well, which completely depends on the transformation you're interested in. So one other word on the transformations. We need the class of transformations to contain the identity, as we just saw that's for the simulation strategy. And we also need it to be closed under composition. And that's for compactness, right? So that if I go mall a proof and then I give it to you and you go mall it and we pass it around, we don't want the proof to be growing. And so that's why we have this requirement. Finally, there's kind of one thing that might seem to be missing here, which is of course malleability. So in the paper we examine in great detail the many ways in which GS proofs are malleable, but I won't have time in the talk. So, zipping right along to the applications. Again, I'll give the two that I mentioned earlier. So the first is this notion, strong notion of encryption security called CMCCA security. And this is heavily inspired by that previous notion of each CCA security by Prabhakar and Rasulak, and also related to the notion of targeted malleability by Bonaise Geven Waters. So briefly, what's our security game look like? We have our adversary. And on the left side, the adversary might be in this real world, so he gets a normal public key. And then he can just interact at will with encryption and decryption oracles. So we get rid of a challenge cipher text completely. And then on the right side, he might be in the simulated world. So here he gets some simulated public key. And then he gets access to these slightly strange looking oracles. Essentially what's happening is the E oracle, since the CMCCA algorithm doesn't even see the message. This oracle is essentially just returning encryptions of garbage. Okay, but what's important is that those garbage encryptions can be sort of tracked. So this same X oracle, given a cipher text, can attempt to pull out a previously queried cipher text and a transformation from that cipher text to the new one. So hopefully that sounds kind of similar to this notion in CMSSE. And so even though C, sorry, even though C prime and therefore C might contain encryptions of complete garbage, we know what they're supposed to contain because of this database queue. And so we can kind of return the appropriately transformed message. So that was very hand wavy, but I'll also mention, and of course we don't want the adversary to know which world he's in. So as I said, we give this nice modular generic construction for achieving encryption that satisfies this notion. In fact, it's really simple, I can say it right here. We essentially just to encrypt a message, we encrypt it using an inCPA secure scheme. And then we prove knowledge of the value inside that cipher text using a CMNISIC. And if you're more interested, you can definitely see the paper. So moving on to our final application, Shuffle. So we already saw plenty on this in the previous talk. So hopefully these slides will just be a brief reminder. So what is a shuffle? Well, we can imagine it in the context of a voting system. So voters, as they go to place their votes, can encrypt these votes under some given public key. They can then kind of go post that cipher text on a bulletin board somewhere. And this gives a public set of cipher texts. So what next happens is these are fed through some series of mixed servers. So these mixed servers are responsible for shuffling the cipher text, which means permuting and re-randomizing them. So what happens is they're fed in and they're fed back out in this completely random order, completely re-randomized as well. So this has gone through a number of mixed servers. And the final outcome is this set of cipher texts. So again, because each mixed server permutes and re-randomizes the cipher texts, this final set is gonna be in a completely random order. And furthermore, they're gonna be completely independent of these input cipher texts because they've been re-randomized. So in particular, performing this threshold decryption that we saw won't reveal whose vote is whose, and so we can just decrypt and tally up the election, okay? So again, one problem that we saw in the last talk as well, was well how do we actually even know these mixed servers are behaving honestly, right? So we want them to be shuffling the cipher texts, but we can't really guarantee that they are. So of course we can guarantee that they are if we ask them in addition to outputting their cipher texts to also output a proof, right? So this proof pi is like a zero-knowledge proof that says, I really did the shuffle honestly. So we can ask each mixed server to output such a proof, and then we can say that the shuffle is what we call verifiable, right? Because any user kind of sitting at home can go check all these proofs and make sure that the election really did take place honestly, all right? So one new problem is, well, there are K-proofs up here. So the size of the overall proofs that the user has to check is seemingly necessarily growing with the number of mixed servers, all right? So as you may have guessed at this point in the talk, the way we're gonna solve this problem is using malleability, all right? So now what we're gonna do is have the initial mixed server output a proof pi, just a fresh proof pi, okay? But in addition to passing along now the cipher texts, we're also gonna ask it to pass along its proof to the next mixed server, okay? And these subsequent mixed servers are going to have their own transformations. So this is the permutation, the re-renomization, and also this kind of stamp of participation of the public key. And what they're gonna do is they're gonna maul the proof using this eval algorithm, and kind of fold in their permutation and re-renomization to the one from the mixed server before it. Okay, so this essentially just gets passed down the line. And we can now say that this shuffle is compactly verifiable, because this last proof pi, pi K, is gonna suffice to verify the correctness of the entire multi-step shuffle, all right? So if there are n cipher texts, let's say, and K of these mixed servers, then the solution we had before with the verifiable shuffles seems to require this overall proof size of O of n times K, right? Because we needed a separate proof for each mixed server. But now with just the one proof, we can get a proof size, an overall proof size of O of n plus K, okay? And I also want to mention, this isn't just a theoretical bound. So in this paper, we were constrained by our representation of the permutation as a matrix. So we ended up with a proof of size O of n squared plus K. But in a very recent result, we used new methods for the CMNICIC construction, and thus new methods for the representation of the permutation to achieve actual O of n plus K. Okay, so that's about all I have to say. Just to quickly wrap things up, what have we done? So we defined these notions of malleability for proofs. We saw this in sort of a few different flavors, namely uncontrolled and controlled. We also saw these two applications, CMCCA security and compact shuffles, and not so much in the talk. But in the paper, we saw that Grotze high proofs have these meaningful malleability properties. And we also did a lot more. So if you're interested, please check out the full version online. And thank you very much for listening, and I can take some quick questions. We have time for questions. Okay. If I go back to your early example where Alice had some values stored in the cloud, and then she was able to ask for the mean of them, if she later decides she wants some other functions, so she wants the product or she wants the standard deviation or something, can she then ask for that and authorize that as a new allowed transformation? Or is the set of allowed transformations fixed for all time? Yeah, it's sort of fixed when the parameters are generated. But that's a great idea. Maybe that's an open question then, how to authorize new transformations. More questions? OK, let's thank Sarah.