{"id":860,"date":"2019-02-15T16:06:30","date_gmt":"2019-02-15T22:06:30","guid":{"rendered":"http:\/\/www.malos-ojos.com\/?p=860"},"modified":"2019-02-15T16:17:07","modified_gmt":"2019-02-15T22:17:07","slug":"hurry-everyone-add-1-or-to-the-end-of-your-8-character-passwords-now","status":"publish","type":"post","link":"http:\/\/www.malos-ojos.com\/?p=860","title":{"rendered":"Hurry!  Everyone add \u201c1\u201d or \u201c!\u201d to the end of your 8-character passwords now!"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"575\" data-attachment-id=\"864\" data-permalink=\"http:\/\/www.malos-ojos.com\/?attachment_id=864\" data-orig-file=\"http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b.jpg\" data-orig-size=\"1024,575\" data-comments-opened=\"1\" data-image-title=\"20444472458_db70e75c68_b\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b-1024x575.jpg\" src=\"http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b-1024x575.jpg\" alt=\"\" class=\"wp-image-864\" srcset=\"http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b.jpg 1024w, http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b-300x168.jpg 300w, http:\/\/www.malos-ojos.com\/wp-content\/uploads\/2019\/02\/20444472458_db70e75c68_b-768x431.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Seeing all the \u201cyour 8-character passwords are dead!\u201d posts\nand articles gave me a good laugh as that\u2019s already been the case.&nbsp; We have been down to reasonable offline cracking\ntimes even with modest hardware investments for a while now.&nbsp; There are also several caveats to saying that\nan 8-character password is dead, but I\u2019ll get to that later in the post.&nbsp; For those wondering, most all of these posts\nwere spurred by a recent announcement by hashcat that a tuned version of 6.0 had\nachieved 100GH\/s NTLM speeds using a single Nvidia GeForce RTX 2080Ti (<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/twitter.com\/hashcat\/status\/1095807014079512579');\"  href=\"https:\/\/twitter.com\/hashcat\/status\/1095807014079512579\">https:\/\/twitter.com\/hashcat\/status\/1095807014079512579<\/a>).&nbsp; Some news sources keep saying \u201c8 cards\u201d but\nthat\u2019s not the case as they show only a single card in the 100GH\/s benchmark.&nbsp; Besides, my meager 6 x GTX 1060 cracking rig\nat home already achieves 120GH\/s for NTLM and given the advancements in GPU\ntechnology I\u2019m not surprised by the benchmark speeds of the RTX 2080Ti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But let\u2019s take a step back for a second and detail how that\n8-character NTLM password hash was already crackable prior to this new hashcat benchmark\nand GPU release from Nvidia.&nbsp; Our goal in\nthe following example is to see how long it takes to offline brute-force an\n8-character NTLM hash.&nbsp; We\u2019ll assume you\nhave a set of different budgets just to give a sense of the spend required to\nachieve certain cracking times:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Scenario\n1<\/strong> \u2013 We have old hardware laying around that we purchased long ago &#8211; I\u2019m\nusing this as an example to show how rapidly the cracking times have dropped \u2013 so\nlet\u2019s say this is a single GTX 960 card capable of 10GH\/s speeds on NTLM hashes\n(circa 2015).<\/li><li><strong>Scenario 2\n&#8211; <\/strong>You have a budget of ~$3,500 with which you could easily buy a smaller GPU\ncracking rig that has 6 GTX 1060 cards on which to run hashcat and you\u2019d get to\n120GH\/s speeds on NTLM hashes.<\/li><li><strong>Scenario 3<\/strong>\n&#8211; You have a budget that is double, or ~$7,000, which would get you 8 GTX 1080\ncards and speeds of 350GH\/s on NTLM hashes.&nbsp;\n<\/li><li><strong>Scenario\n4 <\/strong>\u2013 You don\u2019t want to buy hardware, so find that the p3.16xlarge EC2\ninstance on Amazon AWS fits your needs as it has 8 Nvidia Tesla V100 GPUs available\nfor $25\/hr. and is able to reach 633GH\/s NTLM speeds.<\/li><li><strong>Scenario 5<\/strong>\n&#8211; You have a budget of ~$12,000 in which nets you 8 RTX 2080Ti cards and speeds\nof 800GH\/s for NTLM hashes.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we need to look at total keyspace of our password.&nbsp; Ignoring that many people choose repeatable\nor known patterns when selecting and updating or changing their passwords (see:\n<a href=\"http:\/\/www.malos-ojos.com\/?p=771\">http:\/\/www.malos-ojos.com\/?p=771<\/a>),\nand assuming that we need to brute-force the entire keyspace (we\u2019re really\nunlucky and only match on the last and final combination), we can calculate\nmaximum cracking time for any 8-character password based on the time it takes\n(at our guessing rate) to exhaust the keyspace.&nbsp;\nAssuming there are 95 possible characters (upper alpha, lower alpha,\nnumeric, special characters, etc. \u2013 the \u201cascii-32-95\u201d set) and a password length\nof 8, we have: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A keyspace of 95^8, or 6,634,204,312,890,625\npossible combinations.&nbsp; <\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those who started in security when we used CPUs to crack\nwould recognize that keyspace as an almost insurmountable task and we\u2019d be\ndiscussing how many \u201c2 to the power of something\u201d years it would take to crack.&nbsp; Also, while I gave up on rainbow table years\nago, writing this made me question if anyone has even bothered to generate NTLM\n8-character \u201cascii-32-95\u201d tables (the 8 char NTLM mixed-alpha + numeric tables are\n~127GB) as I have never seen them, publicly traded at least.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;But I digress, so let\u2019s\nsee how our scenarios above play out and determine maximum cracking time:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Scenario\n1<\/strong> \u2013 663420 seconds = 11057 minutes = 184 hours = 7 days 16 hours<\/li><li><strong>Scenario\n2<\/strong> \u2013 55,285 seconds = 921 minutes = 15 hours 24 minutes<\/li><li><strong>Scenario 3<\/strong>\n\u2013 18,954 seconds = 315 minutes = 5 hours 15 minutes<\/li><li><strong>Scenario 4\n<\/strong>\u2013 10,480 seconds = 174 minutes = 2 hours 54 minutes<\/li><li><strong>Scenario 5<\/strong>\n\u2013 8,292 seconds = 138 minutes = 2 hours 18 minutes<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">From these results we see that even with a limited budget of\n~$3,500 that we need less than a day to crack a hash (remember, that is a\nmaximum length) that previously, using CPUs, would take years.&nbsp; If we assume on average that we need to\nexhaust 50% of the keyspace before a match then these times drop by half, meaning\nwe should be cracking hashes in ~7.5 hours on that same $3,500 system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What I find interesting about Scenario 4 is that although\nyou have no upfront hardware costs you quickly exhaust your funds if you have a\nlarge number of hashes to crack.&nbsp; As an example,\nif you cracked 160 NTLM hashes, again assuming worst case scenario where we\nneed to exhaust our keyspace, we would have hit the $12,000 mark in fees and\ncould have simply purchased our own hardware for the job.&nbsp; Speaking of costs \u2013 one interesting thing to\nnote is the cost per GH\/s of cracking speed as it goes down the higher your\nbudget.&nbsp; At $3,500 you\u2019re paying $30 per GH\/s\nand at $12,000 you\u2019re paying half, at $15 per GH\/s.&nbsp; Seems counterintuitive, but the more you\nspend the less it costs per unit of GH\/s. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, as I was reading the articles, news reports, and tweets\nabout this topic I noticed a few mis-conceptions or discussion points that have\npopped up that I\u2019d like to address here:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Why all the\nbuzz around password lengths of 8 characters and where did that recommendation come\nfrom?&nbsp; <\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It comes from a variety of sources, one of which is NIST\nguidance.&nbsp; And while there are sites and\nservices that allow you to use less than 8 (see this: <a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/www.troyhunt.com\/how-long-is-long-enough-minimum-password-lengths-by-the-worlds-top-sites\/');\"  href=\"https:\/\/www.troyhunt.com\/how-long-is-long-enough-minimum-password-lengths-by-the-worlds-top-sites\/\">https:\/\/www.troyhunt.com\/how-long-is-long-enough-minimum-password-lengths-by-the-worlds-top-sites\/<\/a>),\nmost corporate environments will default to the recommended minimum length of 8\nin their password policies.&nbsp; However,\nthat guidance may have been (read: is) based on dated information, thinking\nback to CPU-based cracking and much slower rates, which meant that an offline\nattack against an NTLM hash would not be successful and because we have maximum\npassword ages and rotation requirements it isn\u2019t an issue\u2026but it is, and has\nbeen for some time.&nbsp; Even PCI requirement\n8.2.3 states a requirement for a minimum 7-character password length, which significantly\nreduces the keyspace we have to cover in brute-force attacks.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>But my\ncompany requires me to rotate my password every 30\/60\/90\/X days, so we should\nbe good, right?<\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Not really, if the numbers above hold and I can break your\nNTLM hash in under 3 hours, unless I\u2019m very unlucky and the time between obtaining\nthe hashes and cracking them offline plus the 3 hours of cracking times\ncoincides with the same day you either manually rotate your password (unlikely)\nor are forced to by the system (more likely) then I have access for at least 1\nto as many days in your maximum password age policy.&nbsp; If my goal is to log in as you and download\nyour mailbox as an offline .pst then I\u2019ll probably be successful.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>What\nabout password complexity \u2013 doesn\u2019t that help?<\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Not really, but sort of.&nbsp;\nIn my scenarios and brute-forcing time calculations above I accounted\nfor all 95 characters, which would include your special character requirement.&nbsp; Not to mention, you likely have a password\nthat conforms to a well-known standard (see: <a href=\"http:\/\/www.malos-ojos.com\/?p=771\">http:\/\/www.malos-ojos.com\/?p=771<\/a>), which\nmeans I can use rules and wordlists to more effectively crack the hash and could\nmore effectively attack your hash.&nbsp; In\nfact, if you kept the 8-character length requirement but ditched the complexity\nrequirement (assume mixed-alpha numeric only) I could crack your password (in\nthe best case above) in 4.5 minutes as opposed to 2 hours and 15 minutes).&nbsp; So yes, I say sort of as it increases the\nkeyspace and increases brute-force time \u2013 but also not really considering your\nspecial characters either start or end your password which is a pronounceable\nroot word or words.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Why the\nfocus on NTLM hashes?&nbsp; Does the hash type\nmatter?<\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Hash type absolutely matters \u2013 ask an old security\nprofessional about LM hashing and they will regale you with stories of the olden\ndays and rainbow tables and domain admin access every time.&nbsp; If you look at NTLM, which is an MD4 hash of\nthe plaintext password, it is a very fast algorithm.&nbsp; Meaning it is fast to calculate and makes it\nmore susceptible to brute-forcing as you\u2019re allowing me to test more (higher\nrates) plaintext inputs to match the MD4 hash output.&nbsp; I also focus on NTLM (-m 1000 for the hashcat\ncrowd) as that is the default storage mechanism in Microsoft Active Directory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That being said, NTLM isn\u2019t the only hash type out there\u2026and\nno, we don\u2019t need MD4 to be as fast as it is for password storage or\nauthentication.&nbsp; Which brings us to other\nways in which we can store based on passphrase-based key derivation functions such\nas PBKDF2 (https:\/\/en.wikipedia.org\/wiki\/PBKDF2) which isn\u2019t very GPU resistant\nbut obviously better that MD4, and algorithms such as bcrypt, scrypt, and now\nArgon2 (<a onclick=\"javascript:pageTracker._trackPageview('\/outgoing\/en.wikipedia.org\/wiki\/Argon2');\"  href=\"https:\/\/en.wikipedia.org\/wiki\/Argon2\">https:\/\/en.wikipedia.org\/wiki\/Argon2<\/a>).&nbsp; As an example of the slow down in\nbrute-forcing, a single GTX 1060 can do 19 billion MD4 calculations per section\nversus only 240,000 per second for scrypt.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Does this\nmean you can use these GPU cracking rigs against websites?<\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No, and that\u2019s the difference between online and offline\nattacks.&nbsp; What I\u2019m covering here are\noffline attacks, meaning the attacker has the hash in their possession and can attempt\nto recover the password\/crack the hash on their own system.&nbsp; This usually occurs if the organization has\nbeen breached, someone has gained admin access to a system or the domain, and\nhas \u201cdumped\u201d the password hashes (or captured them in transit across the\nnetwork).&nbsp; Online attacks would require a\ndifferent toolset and would operate at much slower speeds\/rates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But this brings me to a different point, as we gain cracking\nrate speed it also means those password hashes dumped on the internet become\neven more susceptible to cracking, depending as stated above on the hashing\nalgorithm used.&nbsp; Then again, we already\nknow the general format of the password and that many web services allow 6-7\ncharacter non-complex passwords, and while many have obviously fallen because of\nthis I\u2019m speaking of the more complex passwords that have not, until now.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Anything\nyou haven\u2019t covered?<\/strong><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A lot, and I mean A LOT!&nbsp;\nWe haven\u2019t even touched FPGA and ASICS here, precomputation, side\nchannel attacks, and a whole lot of other stuff related to password storage,\nhashing, and cracking\u2026and I stuck with unsalted password hash storage versus\nnetwork authentication algorithms for simplicity.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seeing all the \u201cyour 8-character passwords are dead!\u201d posts and articles gave me a good laugh as that\u2019s already been the case.&nbsp; We have been down to reasonable offline cracking times even with modest hardware investments for a while now.&nbsp; There are also several caveats to saying that an 8-character password is dead, but I\u2019ll [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-860","post","type-post","status-publish","format-standard","hentry","category-general"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pme9o-dS","jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/posts\/860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=860"}],"version-history":[{"count":3,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/posts\/860\/revisions"}],"predecessor-version":[{"id":866,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=\/wp\/v2\/posts\/860\/revisions\/866"}],"wp:attachment":[{"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=860"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.malos-ojos.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}