SHOW:
|
|
- or go back to the newest paste.
| 1 | ______ __ ______ _ __ ____ ____ ____ ______ | |
| 2 | / ____// / / ____/| |/ / / _// __ \ / _// ____/ | |
| 3 | / /_ / / / __/ | / / / / / / / / / / __/ | |
| 4 | / __/ / /___ / /___ / | _/ / / /_/ /_/ / / /___ | |
| 5 | /_/ /_____//_____/ /_/|_|/___//_____//___//_____/ | |
| 6 | ||
| 7 | brought to you by | |
| 8 | __ __ ___ | |
| 9 | / / ___ ___ ___ ___ _ ____ ___/ / / _ ) ___ __ __ | |
| 10 | / /__/ -_)/ _ \ / _ \/ _ `// __// _ / / _ |/ _ \/ // / | |
| 11 | /____/\__/ \___// .__/\_,_//_/ \_,_/ /____/ \___/\_, / | |
| 12 | /_/ /___/ | |
| 13 | __ | |
| 14 | ___ _ ___ ___/ / | |
| 15 | / _ `// _ \/ _ / | |
| 16 | \_,_//_//_/\_,_/ | |
| 17 | ||
| 18 | __ __ ___ __ _ | |
| 19 | / /_ / / ___ / _ \ ___ ____ ___ ___ / /_ (_)____ ___ ___ ___ | |
| 20 | / __// _ \/ -_) / // // -_)/ __// -_)/ _ \/ __// // __// _ \ / _ \ (_-< | |
| 21 | \__//_//_/\__/ /____/ \__/ \__/ \__// .__/\__//_/ \__/ \___//_//_//___/ | |
| 22 | Brazil's numero uno hacking group /_/ A familia! A movimento! | |
| 23 | BTC GO HERE: 13XWdkW5sff2tUHauoEU4dKiigiMScEr7q | |
| 24 | Twitter:@fleximinx (for now) | |
| 25 | ||
| 26 | ========================================================================== | |
| 27 | --[1: Introduction]------------------------------------------------------- | |
| 28 | ||
| 29 | Hello, all! | |
| 30 | ||
| 31 | Since FlexiSpy burnt their entire network driving us out, we think it's | |
| 32 | time for us to release our HowTo guide for aspiring hackers, about what we | |
| 33 | did, and how you can do it, too. | |
| 34 | ||
| 35 | This is going out there to help people learn how to hack and how to defend | |
| 36 | themselves, as is traditional after these types of hacks. | |
| 37 | ||
| 38 | There are lots of articles out there written by other talented | |
| 39 | hackers that would serve as excellent introductions, but we'd be remiss | |
| 40 | if we didn't include Phineas Fisher's articles, which are fantastic | |
| 41 | introductions [1][2][3]. They cover things like how to stay safe and many | |
| 42 | of the basics, including many techniques we used to compromise | |
| 43 | FlexiSpy/Vervata/etc. So read them and soak them up. | |
| 44 | ||
| 45 | [1] http://pastebin.com/raw/cRYvK4jb | |
| 46 | [2] http://pastebin.com/raw/GPSHF04A | |
| 47 | [3] http://pastebin.com/raw/0SNSvyjJ (the previous link, translated into | |
| 48 | Gringo) | |
| 49 | ||
| 50 | --[2: Recon]-------------------------------------------------------------- | |
| 51 | ||
| 52 | Just like Phineas, our initial tactic was to run fierce against both | |
| 53 | vervata.com and flexispy.com, then do some whois lookups to enumerate the | |
| 54 | entire IP space. | |
| 55 | ||
| 56 | You can see the output of fierce (post-hack, sadly depleted after we stole | |
| 57 | their DNS) below: | |
| 58 | ||
| 59 | 192.168.2.231 portal.vervata.com | |
| 60 | 58.137.119.230 www.vervata.com | |
| 61 | ||
| 62 | 180.150.144.84 api.flexispy.com | |
| 63 | 180.150.144.84 admin.flexispy.com | |
| 64 | 180.150.144.83 affiliate.flexispy.com | |
| 65 | 180.150.144.83 affiliates.flexispy.com | |
| 66 | 180.150.144.83 blog.flexispy.com | |
| 67 | 180.150.156.197 client.flexispy.com | |
| 68 | 180.150.144.82 community.flexispy.com | |
| 69 | 58.137.119.229 crm.flexispy.com | |
| 70 | 54.246.87.5 d.flexispy.com | |
| 71 | 216.166.17.139 demo.flexispy.com | |
| 72 | 180.150.144.86 direct.flexispy.com | |
| 73 | 180.150.144.85 ecom.flexispy.com | |
| 74 | 54.169.162.58 log.flexispy.com | |
| 75 | 180.150.147.111 login.flexispy.com | |
| 76 | 68.169.52.82 mail.flexispy.com | |
| 77 | 68.169.52.82 mailer.flexispy.com | |
| 78 | 180.150.144.86 mobile.flexispy.com | |
| 79 | 180.150.156.197 monitor.flexispy.com | |
| 80 | 180.150.144.87 portal.flexispy.com | |
| 81 | 68.169.52.82 smtp.flexispy.com | |
| 82 | 180.150.146.32 support.flexispy.com | |
| 83 | 75.101.157.123 test.flexispy.com | |
| 84 | 180.150.144.83 www.flexispy.com | |
| 85 | ||
| 86 | ||
| 87 | They had several servers situated behind Cloudflare, which was a problem. | |
| 88 | Cloudflare unfortunately has a pretty effective WAF that, while nowhere | |
| 89 | near guaranteed to put an end to any fun, does almost guarantee that it'll | |
| 90 | be a lot more difficult and require a lot of configuring any automated | |
| 91 | tools to avoid setting it off. We had time, though, and looking at that | |
| 92 | list, what hostname seems immediately interesting? | |
| 93 | ||
| 94 | Yes, that's right. It's admin.flexispy.com. Probably an admin panel. | |
| 95 | ||
| 96 | --[3: Level 1]------------------------------------------------------------ | |
| 97 | ||
| 98 | Now that we had a target, it was time to go to work. | |
| 99 | ||
| 100 | We tried some SQL injection on the login page [1]. We didn't get anywhere, | |
| 101 | but this wasn't very surprising. It's not 2010 any more; SQL injection is a | |
| 102 | widely-known attack, and most tutorials now teach people how to not end up | |
| 103 | introducing simple vulnerabilities into software. | |
| 104 | It still happens. You just can't rely on it. | |
| 105 | ||
| 106 | So, out of boredom, we tried some common default credentials. admin:admin, | |
| 107 | administrator:administrator, the usual culprits. Imagine our surprise when | |
| 108 | test:test are valid. | |
| 109 | ||
| 110 | We log in and look around. It's one user, tied to a gmail address. They | |
| 111 | have one license, which seems like a dead test device. | |
| 112 | There's some functionality there that throws you into what appears to be | |
| 113 | the customer interface over at mobilebackup.biz using some | |
| 114 | oauth/single-sign-on functionality. There's also functionality for viewing | |
| 115 | user details, looking at license details, and editing user details like | |
| 116 | username, password, and so on. | |
| 117 | ||
| 118 | The URL looks like this: | |
| 119 | https://admin.flexispy.com/secure/employee/editEmployee?employeeId=1 | |
| 120 | ||
| 121 | Of course, because we're not dealing with people concerned about security, | |
| 122 | you can just change the Id=1 to Id=2. And that'll show you another user's | |
| 123 | details. And let you reset their password on the customer interface. | |
| 124 | ||
| 125 | We played around with that for a couple of hours, and then we wrote a very | |
| 126 | simple script that just used curl to request every single ID up to | |
| 127 | 99999, which was the upper limit. We repackaged this into a nice text file | |
| 128 | and did some grepping to see if there were interesting customers (there | |
| 129 | were several), before getting bored and moving on. There's only so much you | |
| 130 | can do with customer lists, and that probably wasn't going to be enough to | |
| 131 | kill FlexiSpy. | |
| 132 | ||
| 133 | [1] https://www.owasp.org/index.php/Testing_for_SQL_Injection_(OTG-INPVAL-005) | |
| 134 | ||
| 135 | --[4: Level 2]------------------------------------------------------------ | |
| 136 | ||
| 137 | Next, we decided to use nmap to scan their office ranges. We'd found these | |
| 138 | through our earlier fierce scan, and you can see them below. | |
| 139 | ||
| 140 | 58.137.119.224 - 58.137.119.239 | |
| 141 | 202.183.213.64 - 202.183.213.79 | |
| 142 | ||
| 143 | There were a few SSH servers running, a Microsoft Exchange server, and some | |
| 144 | RDP, along with a few websites which mostly seemed to be hosting WildFly | |
| 145 | default pages, and one CRM instance. | |
| 146 | ||
| 147 | Those were interesting, because it indicated there was both Linux and | |
| 148 | Windows on their internal network, which gave us options once we got | |
| 149 | inside. For now, though, we didn't have access, so we looked to see what | |
| 150 | else there was. On one server, port 8081, there appeared to be a Sonatype | |
| 151 | Nexus repository with some jar files sitting in it, which appeared to be | |
| 152 | for the command-and-control web applications. We assume that FlexiSpy put | |
| 153 | them there deliberately for resellers to take and install on their servers. | |
| 154 | ||
| 155 | What's a group of shadowy, amorphous internet vigilantes to do but sit and | |
| 156 | spend a little bit of time reversing them? We pulled out our copies of | |
| 157 | procyon, a fantastic decompiler for Java [1] and got to work. | |
| 158 | ||
| 159 | We pulled our several interesting utilities; the first would be their | |
| 160 | Mailchimp API key. This was fun, and let us see them sending out emails to | |
| 161 | new customers (with nice, fresh, default passwords they encouraged the | |
| 162 | customers to change). We had a look for vulnerabilities that might let us | |
| 163 | do some SQL injection (again) or exploit the API somehow, but the code | |
| 164 | didn't easily hand over any 0days to us. | |
| 165 | ||
| 166 | What it did hand over, though, was a password, fairly simple, that looked | |
| 167 | like it might be a shared, default password: tcpip123. | |
| 168 | We sprayed this around against the SSH servers and the WildFly servers, | |
| 169 | but didn't have much luck. | |
| 170 | ||
| 171 | Finally, we decided to try the CRM. Amazingly, we were able to compromise | |
| 172 | an administrator account using the password we found. From there, we were | |
| 173 | able to manipulate certain module installation functionalities into, | |
| 174 | eventually, letting us get remote code execution, and uploaded our shell. | |
| 175 | ||
| 176 | [1] https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler | |
| 177 | ||
| 178 | --[5: Level 3]------------------------------------------------------------ | |
| 179 | ||
| 180 | So, there we were, sitting on a server inside FlexiSpy's internal network. | |
| 181 | We weren't root, and the kernel was relatively new. We could have tried | |
| 182 | using DirtyCow [1], but many of the publicly available exploits had a high | |
| 183 | risk of frying the server, and the more reliable methods would require | |
| 184 | creating a development VM identical to the CRM server, which would take | |
| 185 | time which we were not sure we had. | |
| 186 | ||
| 187 | We dropped a simple tool that allowed us to proxy onto the internal | |
| 188 | network, and we also placed a port scanner and an automated | |
| 189 | credential-checking tool onto the server, and started scanning quietly for | |
| 190 | port 22, 3389, and 23. | |
| 191 | ||
| 192 | Once we had a list of these, the first thing we did was deploy our SSH | |
| 193 | scanner against them to test for the simple combination of root:tcpip123, | |
| 194 | admin:tcpip123, and Administrator:tcpip123. | |
| 195 | ||
| 196 | We were in luck. We had managed to compromise three of their NAS servers. | |
| 197 | These were all Linux x86-64 machines, too, which meant we could deploy our | |
| 198 | tools on them with relative ease. We backdoored the NAS servers using some | |
| 199 | code of our own devising, which we left running in-memory hidden as one | |
| 200 | of the existing services to avoid bringing any unwarranted attention down | |
| 201 | on our heads. | |
| 202 | ||
| 203 | From there, we spent several days scouring the systems. On one, we found | |
| 204 | source code backups, on another, we found backups of home directories, HR | |
| 205 | documents, corporate files, some SSH keys, password backups, internal | |
| 206 | network diagrams, you pretty much name it, we had it. Many of these files | |
| 207 | were quite out of date, but we were able to glean the password/username | |
| 208 | combination to several servers (services:tcpip123 and services:**tcpip!23) | |
| 209 | which also had sudo privileges. | |
| 210 | ||
| 211 | We stole SSH keys from a number of them, and tasked the Jenkins server | |
| 212 | to start pulling down all of their repositories, and send them off to a | |
| 213 | server on the internet we controlled afterwards. | |
| 214 | ||
| 215 | We also noticed we had access to the Domain Controller for all of the | |
| 216 | Windows domains, so we dropped some malware on that, and started slowly | |
| 217 | infecting devices and pulling credentials from memory. One of those sets of | |
| 218 | credentials belonged to a member of staff in charge of IT, which gave us | |
| 219 | access to the internal SharePoint server, which is always a house of fun. | |
| 220 | ||
| 221 | By this point, we realised that FlexiSpy didn't give a crap about security, | |
| 222 | and in order to give us as many different points of access as possible, we | |
| 223 | deployed Tor across the Linux infrastructure, setting up each server's SSHd | |
| 224 | as a Hidden Service. We siphoned out as much as we could, stopping for a | |
| 225 | few weeks to attempt to transfer the EDB files from the Exchange Server, | |
| 226 | which were over 100GB in size. Eventually, we gave up, after trying several | |
| 227 | times to exfiltrate them, because we felt if we kept going, we'd eventually | |
| 228 | cause an alert loud enough that even FlexiSpy would notice. | |
| 229 | ||
| 230 | Once that was done, we contacted Motherboard, gave them the interesting | |
| 231 | files, and sat back with some popcorn. | |
| 232 | ||
| 233 | [1] https://dirtycow.ninja | |
| 234 | ||
| 235 | --[6: BONUS LEVEL]-------------------------------------------------------- | |
| 236 | ||
| 237 | Wiping their servers was mostly a case of dding /dev/urandom all over all | |
| 238 | their drives, but we did have to do that across several RAID devices on | |
| 239 | their ESXi servers, which was one of the most frustrating things we've | |
| 240 | attempted. | |
| 241 | ||
| 242 | Not even several hackers, armed with years of knowledge of | |
| 243 | UNIX, could enjoy trying to use ESXi. Eventually, after entering several | |
| 244 | long and arcane enchantments, we were able to reformat and dd over the | |
| 245 | RAID devices. The rest was fairly simple. | |
| 246 | ||
| 247 | We used the stolen credentials from the SharePoint, NAS devices, and other | |
| 248 | places to log into Cloudflare, drop their account, then log into Rackspace, | |
| 249 | and destroy their servers there, and log into their multiple Amazon | |
| 250 | accounts, deleting as many S3 buckets of backups as we could find, before | |
| 251 | killing all of those. | |
| 252 | ||
| 253 | Finally, we redirected their domains to Privacy International, and went on | |
| 254 | our merry way, pausing only to hijack a few twitter accounts and laugh at | |
| 255 | FlexiSpy. | |
| 256 | ||
| 257 | --[7: Hack Back!]--------------------------------------------------------- | |
| 258 | ||
| 259 | Firstly, we'd like to dedicate this to everyone who has ever been a victim | |
| 260 | of Gamma, or FlexiSpy, or other surveillance tools. | |
| 261 | ||
| 262 | We've stolen every a great deal of source code, going back years. We are | |
| 263 | hoping that signatures are going to be distributed, tools written to | |
| 264 | identify and remove infections, and we also hope that people will see that | |
| 265 | this industry is really out there, is worth money, and that it's terribly, | |
| 266 | terribly evil. | |
| 267 | ||
| 268 | We're just, like, this group of guys, you know? We can hack these people, | |
| 269 | and we can expose their secrets, but it's up to everyone to make a | |
| 270 | difference. | |
| 271 | ||
| 272 | If you have reverse-engineering skills, please, put them to use here. And | |
| 273 | not just with FlexiSpy. Take apart other malware samples, from other | |
| 274 | vendors of the same scumware. | |
| 275 | ||
| 276 | If you have contacts in the antivirus or threat intelligence industry, | |
| 277 | push your colleagues to spend a little more time on these things. | |
| 278 | ||
| 279 | If you're a hacker, hack back. | |
| 280 | ||
| 281 | If you're an ordinary person, stay safe. Watch how things progress, and see | |
| 282 | what people are saying about how to detect FlexiSpy and protect yourselves. | |
| 283 | Several researchers, such as Hacker Fantastic [1], Tek [2], and Ben [3] are | |
| 284 | doing really good work. | |
| 285 | ||
| 286 | If you're a spouseware vendor, we're coming for you. Stop, rethink your | |
| 287 | life, kill your company, and be a better person. | |
| 288 | ||
| 289 | Otherwise, you'll be seeing us soon. | |
| 290 | ||
| 291 | [1] https://twitter.com/hackerfantastic | |
| 292 | [2] https://twitter.com/tenacioustek | |
| 293 | [3] https://twitter.com/Ben_RA |