Archive
New Combinator Password Cracking Methods
While doing a security assessment a password hash was recovered using responder.py, we then attempted to crack the hash using Hashcat and the hate_crack script and failed to recover this hash. We were later successful in getting domain admin level access using another method and using CrackMapExec we were able to use Mimikatz to recover the clear text password from the memory of the user’s computer. We found that it consisted of two words separated by a number and was 12 characters long. It didn’t fit any of the Pathwell Top 100 Mask Brute Force Crack methods. The mask was ?u?u?d?l?l?l?l?l?l?l?l?l
This is a very common and logical pattern that many people use.
I could just add this mask to the existing Pathwell masks, and this would work taking about 3 days with 4 Nvidia Geforce GTX 1080s. But it would be more efficient to use a modified combinator attack, which would work in many more instances. Hashcat allows you to add a rule to each side of the combinator attack using the -j and -k flags, this allows you to append a character to each side of the combinator attack. As far as I can tell though there is no way to simulate a mask with one run, so I added two new methods to the hate_crack script. The first method I am calling the Middle combinator attack.It is simple:
Dict1 + masks + Dict2
Where the masks are: 2 4 <space> – _ , + . &
I chose these as I have found these are common characters to separate two words.
The second method I am calling the Thorough Combinator Attack. It runs through many different combinator attacks using different masks. Currently, it uses the following methods:
– Standard Combinator attack: rockyou.txt + rockyou.txt
– Middle Combinator attack: rockyou.txt + ?n + rockyou.txt
– Middle Combinator attack: rockyou.txt + ?s + rockyou.txt
– End Combinator attack: rockyou.txt + rockyou.txt + ?n
– End Combinator attack: rockyou.txt + rockyou.txt + ?s
– Hybrid middle/end attack: rockyou.txt + ?n + rockyou.txt + ?n
– Hybrid middle/end attack: rockyou.txt + ?s + rockyou.txt + ?s
I know I am most likely not the originator of this method, but I haven’t seen it described yet. I have the code working in my fork of the hate_crack tool and sent Trustedsec a pull request.
Konboot
I am playing around with konboot after first hearing about it on the Hak5 podcast. If you haven’t heard about it, it is a boot disk you can create on a floppy, CD or USB drive (see Irongeek’s site for USB instructions). The disk changes the windows or Linux kernel on the fly while booting to allow you to bypass the login password. In windows you just use any valid user name and a blank or garbage password, you will then be logged in as that user and can access all their files. So naturally you will probably want to try the local administrator user which will allow you to access all files on the computer. In Linux you will use the user name kon-usr and no password. This will give you full root access on the Linux machine.
I have found it works well if the system is not muti-boot. On my systems which are all multi-boot it would only work on one system and only on one OS which happen to be EEEbuntu. My other laptop gave me error about the cylinder number being too high like the old school days of LILO where the boot image had to be below cylinder 1024. I am assuming this is the same issue as the days of old. Also a caveat don’t use Konboot to login to a domain account on a computer that is connected to the network. This will disable the account on the domain and won’t allow you to login. In most environments user credentials are cached in case the network goes down. So air gap the computer before using a domain account.
Remediation steps are fairly simple. Lock the bios with a password and only allow the system to boot from the hard drive. This should already be in the check list of task to perform when deploying a new PC. Since this type of threat isn’t new kon-boot just make it a little simpler to access the PC than loading up a live linux distro like knopix. If there is any sensitive information on the hard drive encryption should be used of course since if someone steals the computer or hard drive its game over. With the breach notification laws in most states that is not a fun proposition.
Getting rid of volume group that doesn’t exist in linux
I was setting up a test VM with 4 one TB SAN LUNS. After successfully creating and testing the VMware image I blew it away without touching the LVM. After greating the production image I tried to add the LUNS back to the LVM and I of course got errors when adding the LUNS to the LVM. The meta data for the old volume group was still there and the OS refused to add the LUNS to the existing volume group. I then tried to remove the volume group with the vgremove but since the devices with the UUIDs themselfs were long gone I could not do it.
I finally found a very simple solution just DD the damn things with zeros. That will blow out all the metadata. So for each lun I ran
if=/dev/zero of=/dev/XXX bs=512 count=5
Probably only needed a count=1 but what the hell I don’t care I didn’t have anydata on the LUNS anyways. After that running lvscan came back clean with no orphaned UUID’s and I was able to initialize the LUNS again and add them to the new volume group.
Roku Netflix Player
There has been some buzz about the Roku netflix player releasing some of its source code. The thing is they have to release the code as its GPL open source code that they modified. The truth is the code should have been available since day 1. This is no different than the Tivo source code that has been released. They didn’t release any of their proprietary code. Now that I know that this is based on Linux though this should hopefully be pretty hackable. It would be great if Xvid and H.264 support can be added. Then I won’t have to use my noisey Xbox 360 to stream my movies off my computer.
Linux Cisco VPN
The Linux Cisco VPN client seems to try the first avalable interface to make a connection. In my case this was eth0 which is my wired port which isn’t connected to anything. In order to get it to work I had to down the interface with ifconfig eth- down then it would connect fine with my wireless interface eth1. I haven’t seen any documentation to see if there is a way to manually bind it to a specific interface, and there is no MAN page installed. At least –help gives some usage, which is heads and shoulders over the tsmc tivoli command line I was using today what a royal PITA. Just encase anyone needs it the command to restore a previous version of a file is “tsmc restore -todate=yyyy-mm-dd -inactive /path/to/file” the documentation gave the format for the date as mm/dd/yyyy and the command would just come back and say -todate not recognized. Not wrong date format no that would have saved Jeff an hour of goggling.
Electronic voting reform
I live in California where the Secretary of State Debra Bowen has allowed The University of California to test the E-Voting systems used in here in California. What they found was that all of them are hackable. I find the preliminary findings very scary but not at all surprising. The legislature of California are not Computer Security Experts but they should have consulted with and let Security Professionals verify that they were secure before Certifying the systems. It is inexcusable to allow what is arguably the most important Computer System in the country to be so insecure. These machines are what decide our election. If you could modify the election results you could execute a bloodless coup and no one would be the wiser. No one could prove that an election had been stolen if there is no paper trail.
I will give you one scenario. All the electronic voting machines are stored in some medium security warehouse with a few guards and 1 or 2 cameras. A disgruntled technician from company XYZ that makes $20,000 a year maintains voting machines is payed some large sum to hack the companies voting machines. He is admitted entry into the facility do do “maintenance” He turns them all on and one by one inserts a USB thumb drive that installs a virus on each machine. He also updates the BIOS and changes the checksum check that is used to verify that the operating system is certified, just like he has to do when he installs any patch. This virus will change the vote on 41% of the votes in the favor of candidate FOO. Thus virtually insuring victory. This virus then removes all traces of itself and restores the correct checksum back into the BIOS at 7:55PM on election day. With the current systems that have no paper trail and no one would find out unless someone starts looking at the technicians large bank account.
I am not saying to go back to all paper ballets, to me this is even more error prone and hackable than E-voting. Just make up some ballet boxes and switch them in transit to the registrars office. No to me the problem is fairly trivial technologically speaking. The solution is 3 fold. First and most simple a paper copy must be printed out and verified correct by the voter. Thus ensuring a backup in case the electronic version is lost or tampered with.
The second part of my proposed solution is PKI (Public Key Infrastructure). Each voter should be assigned a private key, a 3D bar code would work nicely. This key should be assigned completely at random and only good for 1 election so that voting patterns couldn’t be data mined and somehow connect to an individual, there should also be no record kept of the voters private key only their public key should be kept. This private key should be encrypted with a master public key so that there is no way a voters private key and identity could be obtained by coping it in transit unless the person also had the master private key. The voter then would then scan their bar code and the voting machine would verify that it is a legitimate key by decrypting the key with the master private key. The voter would then vote and the results would be signed with the users private key, and also be printed out. If the results were tampered with the signature would not match and it would be obvious that the results were tampered with. If two different votes were signed with the same private key you would also know that the user voted twice and to trow out all other votes signed with the same signature. The public keys and paper copies should be escrowed so that recounts could be done for some defined time.
The last and most important is both the physical security and openness of the system. The inputs should be protected with 3DES encryption so that only certified devices could be plugged in. No uncertified devices should be allowed on the system. No one should be able to plug a key board in. The case should be wielded shut and painted with a heat sensitive paint so any attempted tampering would be apparent. The system should be completely open source from the OS to the voting software so that all code can be freely audited. It someone did manage to hack the system the paper backup should throw up the red flag that the system was compromised. The system should also be on an encrypted EEPROM so that even if you get into the case you can’t modify the EEPROM with out the key. The key should be on a physically separate dongle that is locked up separate from the voting machine and must be present when booting the machine and removed thereafter. If any dongle is lost then all the dongles will have to be replaced and the EEPROM reprogrammed so it is very important that they don’t go missing. The systems should never be plugged into an open network. The system that collects the votes should also have a certificate assigned to it and stored on the voting machines so that the voting machines don’t disclose voting results to an unauthorized system.
All of this technology is common and in use today. We need to reform the voting system so that we implement this as soon as possible. If we don’t we may soon find our country not in our control anymore. I don’t go into all the details about the system but I would love feedback, what are the weaknesses in the system I described. If done correct E-Voting is both more efficient and more secure than paper based voting alone.
Truncating Microsoft sql transaction logs
I rarely touch MS SQL but I have to administer 2 instances, so I have had to learn some of the administrative tasks that have to be done from time to time. One of the less obvious task is truncating transaction logs. The MS SQLs transaction logs can get out of hand on databases that do a lot of writes. MS SQL does not purge transactions that have been committed in case you want to roll the database back to a point in time. At some point after a back up you will probably want to get rid of the old data as it can quickly fill your hard drive. You have to manually truncated the old transactions by running
The easiest way to do this is to open up query optimizer and run it from there.
That will flush out all the old transactions that have already been committed to the database. This however does not resize the file. You will have to manually do this in enterprise manager by choosing shrink database. If you have a scheduled maintenance plan that covers resizing; it will take place on its own the next time it is scheduled.
Snort IDS
I am redoing the IDS system at work. The current IDS uses snort and BASE. Base just isn’t able to keep up under the current load. We got a new quad core server with 4 gigs of ram that should do nicely for base. I also decided to redo the sensors at the same time. They were both running FreeBSD and I wanted to go to CentOS 5 because I am much more familiar with it than FreeBSD. I installed CentOS 5 and did a test run with tcpdump. It just can’t keep up the kernel is dropping packets even when loging just the raw packets to a file. The traffic isn’t huge its about 3000 packets per second (around 32 Mbps). Even after tunning some kernel parameters and some network parameters it was still dropping packets.
From what I have read the FreeBSD network stack is a lot better at this type of thing. I am testing another FreeBSD box to see if it can keep up without dropping packets. If it can keep up then I am going to use freeBSD for the sensors and stick with CentOS for the BASE front end.
UPDATE: FreeBSD took it like a champ 0 dropped packets, so it looks like its FreeBSD for snort
mdid Mysql authentication
Mdid mysql authentication is finished, it is a dirty dirty dirty hack, but it works. Had to chop it into active directory authentication method since mdid does not support two different methods at the same time. Defiantly getting better at C# active directory took me a few days, since I don’t know how the AD api worked and also because I was hacking up someone else’s code. Mysql authentication took maybe 2 hours and most of that was googleing how to implement md5(base64) hashing in c#, it’s actually in System.Security.Cryptography which is nice, didn’t have to write my own function.
Compiling Apache
One of my least favorite things to do is compiling apache. All the different modules are always a pain to get working. Webdav, modssl, php with gd curl fdftk pdflib etc, mod perl, etc. Unfortuantly I use odd addons to php so I almost have to compile. Finally after over a day of fussing I got a newversion up on the main web server. Now that I have curl I can finish my project for authinticating students using ssl and a php script on another server.