I recently got contacted on Twitter in regards to a hacked webpage:
@bartblaze Hey, maybe interesting for you: http://t.co/6rZUD1O1qZ Found on hacked joomla page Got a lot of those files. All have same scheme
— Florian Gümbel (@fgdesign) February 25, 2015
After I received the files two things became apparent:
- the webserver (and thus the website) was infected with C99shell
- the webserver was infected with other PHP backdoors
PHP/c99shell or simply c99shell should be well known by now - it is a PHP backdoor that provides a lot of functionality, for example:
- download/upload files from and to the server (FTP functionality)
- run shell commands
- full access to all files on the hard disk
In short, it can pretty much do everything you want, which results in end-users getting malware onto their systems and/or data getting stolen and/or personal information compromised.
There's an excellent blog post over at Malwaremustdie in regards to C99shell, you can read it here:
How EVIL the PHP/C99Shell can be? From SQL Dumper, Hacktools, to Trojan Distributor Future?
Now, here's one of the files gathered from the webserver:
It's heavily obfuscated as one would expect; after some deobfuscating/decoding we get:
It also has a nice web interface:
Seems like we are dealing with a slightly updated version of C99shell, version 2.1:
And last but not least, some functionality:
You can find the decoded C99shell backdoor on Pastebin:
Detections aren't too great for this PHP backdoor, but it surely has improved since Malwaremustdie started blogging about it, some VirusTotal results: 0, 1, 2.
As I mentioned before, other PHP backdoors were present, for example:
After some manual decoding, we turn up with the following interesting line:
The "x-headers" HTTP_X_UP_CALLING_LINE_ID and HTTP_X_NOKIA_ALIAS are actually part of WML, the Wireless Markup Language.
Thus, this PHP backdoor seems specifically designed to target mobile users. I've put a copy of the script in screenshot above on Pastebin as well:
Unknown PHP backdoor
Darryl from Kahu Security has written an excellent post on how to manually decode this kind of PHP obfuscation: Deobfuscating a Wicked-Looking Script
If you have any information on what kind of PHP backdoor this might be (if not generic), feel free to let me know.
This shouldn't be repeated normally, but I will again just for good measure:
- Take back-ups regularly! Yes, even for your website.
- Keep your CMS up-to-date; whether you use WordPress, Joomla, Drupal, ...
- Keep your installed plugins up-to-date. Remove any unnecessary plugins.
- Use strong passwords for your FTP account(s), as well as for your CMS/admin panel login.
- Use appropriate file permissions - meaning don't use 777 everywhere. (seriously, don't)
- Depending on how you manage your website - keep your operating system up-to-date and, if applicable, install and update antivirus software.
Preventing badware: Basics
There are also guides available on how to harden your specific CMS installation, for example:
WordPress: Hardening WordPress
Joomla: Security Checklist/Joomla! Setup
Drupal: Writing secure code
What if your website's already been hacked and serving up malware to the unknowing visitor? Best practice is to simply take your website offline and restore from an earlier back-up. (don't forget to verify if your back-up isn't infected as well)
If that's not a possibility for whatever reason, you'll first need to find where any malicious code was injected (or created) on your website, or how it was infected in the first place.
An easy way would be to simply check all recently changed files on your web server. However, those dates can be altered. So what's a better alternative? You can comb over the files one by one, or you can use an online tool to check your website.
A short overview:
You can use Sucuri's SiteCheck to quickly spot if they detect any malware, see if you're blacklisted and, the most useful part in this case is to check whether or not you have any outdated plugin or CMS running - as well as a list of links.
Use Redleg's file viewer to easily see if any malicious iframes have been injected - you can even choose which Referrer and User Agent should be used (some malware requires you to visit the site via a specific Referrer or User Agent).
Useful additional tool to Redleg's file viewer. Allows you to only fetch headers of a website, or fetch both header and content.
As usual, VirusTotal is a great resource as well - it can pinpoint which Antivirus (if any) is triggering an alert related to your website.
If nothing is found, but you are still receiving reports from either blacklists (eg. Google) or users, you'll have to manually go over all your files to see if any code was attached. Another method (and obviously not foolproof) is to copy over all your files to a Windows system and scan them with an antivirus. I think you're starting to realize why back-ups are important.
If you had any outdated plugins running, chances are very high the backdoor or script was created/added in that specific directory. For example for WordPress this is typically:
You can also install a plugin for your CMS which can scan your web server for any infected files. (Which is ironic, but might still do the trick should you not be able to find anything manually.)
Last but not least: check your access logs! See any unauthorized (FTP) logins for example? Contact your hosting provider - they might be able to assist you as well.
If you're still stuck, feel free to shoot me an email or contact me on Twitter. Otherwise, contact one of X companies which can help you assist in clean-up.
Don't forget: after clean-up, reset all your passwords (and don't use the same for everything) and follow the prevention tips above, or you'll simply get infected again.
C99shell is obviously not dead and neither are other PHP backdoors - or any other malware for that matter. Securing your website is not only beneficial for you, but also for your customers and other visitors. This blog post should have provided you with the essentials on securing your website and cleaning it up should it ever be infected (repeating: best practice is to take it offline and restore from a back-up).
StopBadware - My site has badware
Google - If your site is infected
PHP Formatter - http://beta.phpformatter.com/
Kahu Security tools - http://www.kahusecurity.com/tools/
(for this specific blog post, PHP Converter is a must-use and very effective tool)
Base 64 Decoder - http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/
Above list is obviously my own personal flavor, feel free to leave a comment with your favorite tool.