@night 1803 access accessdata active directory admissibility ads aduc aim aix ajax alissa torres amcache analysis anjp anssi answer key antiforensics apfs appcompat appcompatflags applocker april fools argparse arman gungor arsenal artifact extractor attachments attacker tools austin automating automation awards aws azure azuread back to basics backstage base16 best finds beta bias bitcoin bitlocker blackbag blackberry enterprise server blackhat blacklight blade blanche lagny book book review brute force bsides bulk extractor c2 carved carving case ccdc cd burning ceic cfp challenge champlain chat logs Christmas Christmas eve chrome cit client info cloud forensics command line computer forensics computername conference schedule consulting contest cool tools. tips copy and paste coreanalytics cortana court approved credentials cryptocurrency ctf cti summit cut and paste cyberbox Daily Blog dbir deep freeze defcon defender ata deviceclasses dfa dfir dfir automation dfir exposed dfir in 120 seconds dfir indepth dfir review dfir summit dfir wizard dfrws dfvfs dingo stole my baby directories directory dirty file system disablelastaccess discount download dropbox dvd burning e01 elastic search elcomsoft elevated email recovery email searching emdmgmt Encyclopedia Forensica enfuse eric huber es eshandler esxi evalexperience event log event logs evidence execution exfat ext3 ext4 extended mapi external drives f-response factory access mode false positive fat fde firefox for408 for498 for500 for526 for668 forenisc toolkit forensic 4cast forensic lunch forensic soundness forensic tips fraud free fsutil ftk ftk 2 full disk encryption future gcfe gcp github go bag golden ticket google gsuite guardduty gui hackthebox hal pomeranz hashlib hfs honeypot honeypots how does it work how i use it how to howto IE10 imaging incident response indepth information theft infosec pro guide intern internetusername Interview ios ip theft iphone ir itunes encrypted backups jailbreak jeddah jessica hyde joe sylve journals json jump lists kali kape kevin stokes kibana knowledgec korman labs lance mueller last access last logon leanpub libtsk libvshadow linux linux-3g live systems lnk files log analysis log2timeline login logs london love notes lznt1 mac mac_apt macmini magnet magnet user summit mathias fuchs md viewer memorial day memory forensics metaspike mft mftecmd mhn microsoft milestones mimikatz missing features mlocate mobile devices mojave mount mtp multiboot usb mus mus 2019 mus2019 nccdc netanalysis netbios netflow new book new years eve new years resolutions nominations nosql notifications ntfs ntfsdisablelastaccessupdate nuc nw3c objectid offensive forensics office office 2016 office 365 oleg skilkin osx outlook outlook web access owa packetsled paladin path specification pdf perl persistence pfic plists posix powerforensics powerpoint powershell prefetch psexec py2exe pyewf pyinstaller python pytsk rallysecurity raw images rdp re-c re-creation testing reader project recipes recon recursive hashing recycle bin redteam regipy registry registry explorer registry recon regripper remote research reverse engineering rhel rootless runas sample images san diego SANS sans dfir summit saturday Saturday reading sbe sccm scrap files search server 2008 server 2008 r2 server 2012 server 2019 setmace setupapi sha1 shadowkit shadows shell items shellbags shimcache silv3rhorn skull canyon skype slow down smb solution solution saturday sop speed sponsors sqlite srum ssd stage 1 stories storport sunday funday swgde syscache system t2 takeout telemetry temporary files test kitchen thanksgiving threat intel timeline times timestamps timestomp timezone tool tool testing training transaction logs triage triforce truecrypt tsk tun naung tutorial typed paths typedpaths uac unc understanding unicorn unified logs unread usb usb detective usbstor user assist userassist usnjrnl validation vhd video video blog videopost vlive vmug vmware volatility vote vss web2.0 webcast webinar webmail weekend reading what are you missing what did they take what don't we know What I wish I knew whitfield windows windows 10 windows 2008 windows 7 windows forensics windows server winfe winfe lite wmi write head xboot xfs xways yarp yogesh zimmerman zone.identifier

Daily Blog #17: Milestones 11 and 12 detailed

Howdy Reader,
                 It's day 2 of the DFIR Summit and after winning the award for "4:Cast award for Best Forensic Article of the Year" (woo!) it's time to write another blog! Today we will be continuing the milestone series which should be done this week. Yesterday we talked about milestones 9 and 10 and today we continue to Milestones 11 and 12, coming ever closer to the end of my defined career progression.

Milestone 11 - You've realized that to optimize your workflow you need to learn some basic programming.
   
    Up to this point none of the milestones presented required anything but your knowledge of tools, artifacts, operating systems and file systems to progress. At this point though we have reached the level where you will  have to cross the gap from user to developer. For people who have never programmed before this seems like an insurmountable task, my advice to you is to put your goals into perspective and reduce the scope of the problem you are trying to solve.

    Why do you need to learn how to program? This is usually the most common question I'm asked when I bring up this point and argue its necessity. This is my answer; if you want keep growing as an examiner and become more efficient in your process while reducing frustration you will have to learn how to automate your tool execution. This will start being as simple as batch scripts that kick off a series of one off tools in your process (prefetch, reg ripper, journal parser, lnk parser, etc...), saving you time and allowing more blog reading while things run. Once you've achieved the batch script automation you'll start thinking about how to improve it by adding some basic decision trees allowing the batch script to run additional processes depending how a previous artifact exited or what other files exist in a directory. Once you've made this first progression from "series of commands executed in order", to "commands executed and some program logic decides what will happen next" you've made an important step into becoming a developer.
 
    It’s that first step that will, over time, drive you towards bridging the gap from scripting to programming as you continue to explore new things you can add to your scripts that will make your life easier. That is what learning to program is about, making your life easier by letting the programming logic you wrote once to perform the same repetitive actions and simple analysis for you one hundred times over. Once you reach the limit of what batch scripting will do for you it's time to expand into more functional programming languages. You might choose to go to a scripting language like perl (clearly the right choice), autoit script (Hi Joakim) or python (also cool) while others will make the jump to C++/C#/Java, etc... There is no wrong answer here on where you start and where you progress to - as long as your transition does not overwhelm you. My advice would be that if the structures necessary to write your program are more complicated than your program code then you might want to take a step back to a simpler language until you need the functionality provided by a more advanced language. 
    The purpose of this milestone is not to make you a developer full time. It is to make you a better examiner by automating parts of your analysis/processing/reporting that don't require you to apply the knowledge you have to make a decision. Instead of just doing repetitive tasks that keep you confined to your keyboard you will be able to switch focus to other tasks and become more productive and informed!
 
Milestone 12 - You've found enough deficiencies in the tools you use that you begin to write your own.
 
 
    At this point you've developed enough automation code to become a decent DFIR developer. You start reading the code in some of the open source tools you use to try to better understand what and how they do what they do. You think about submitting changes to fix problems you find in your work. Over time you may find that if the tool would only work by doing X instead of Y or reported in Z format it would be so much more useful to you, and instead of trying to rewrite someone else's tool you write one from scratch yourself to learn more. 
 
    What language you write your tool in does not matter, what matters is that you have found a real world problem to solve with your programming abilities that will propel you forward. Nothing helps you become a better developer than having a problem you really care about to solve. The more of these problems you find to solve the better a developer you will become. Your program's needs will continue to define your choice of language and libraries and there is so much example code and data structures out there to help you! It's not important if what you are writing has been solved 100 times before by a multitude of tools, what matters is that you successfully create your own version of that tool which solves your unique need.
 
    This is a huge step in your progression as you begin to recognize unknown artifacts in your re-creation testing and analysis and can start doing your own analysis to find them, which is covered in the next milestone!

    Tomorrow we finish the milestones series and see which topic from my list looks more appealing to write about.
Labels:

Post a Comment

[blogger][disqus][facebook][spotim]

Author Name

Contact Form

Name

Email *

Message *

Powered by Blogger.