Mobile Hacking using Linux Drivers

Anil Kumar Pugalia
Anil Kumar PugaliaLinux Geek and Open Source Hardware & Software Freak, Corporate Trainer, Entrepreneur in Automation
Mobile Hacking
                 through
     Linux Drivers


© 2012 Anil Kumar Pugalia <email@sarika-pugs.com>
               All Rights Reserved.
What to Expect?
Objective
  Usual Linux Kernel Hacking Techniques
  Tools to do Reverse-engineering
Assumptions
  Linux Kernel is already ported onto a Mobile
  Getting into the mobile has been figured out




         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   2
                        All Rights Reserved.
The Hacking Architecture
                      User Space
             (provides interface for hacking)


                     Kernel Space
       (provides functionalities & facilities to hack)




                        Hardware
                  (is what needs Hacking)




                    System Call I/F
                      (the connector)



   © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>     3
                  All Rights Reserved.
Kernel Space Functionality
Process Management
Memory Management
Device Management
Storage Management
Network Management




       © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   4
                      All Rights Reserved.
Kernel Driver Ecosystem
bash           gvim        X Server          ssh           gcc          firefox

  Process         Memory           Device
                                                   File Systems     Networking
Management      Management         Control

Concurrency           Virtual      Ttys &          Files & Dirs:   Connectivity
MultiTasking          Memory    Device Access         The VFS
Architecture                     Character         Filesystem        Network
                  Memory
Dependent                         Drivers             Layer         Subsystem
                  Manager
   Code                              &             Block Layer       Interface
                                  Friends           & Drivers         Drivers
       Hardware Protocol Layers like PCI, USB, I2C, RS232, ...



                                 Consoles,          Disks &          Network
    CPU           Memory             `
                                    etc              CDs            Interfaces

               © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>                  5
                              All Rights Reserved.
Kernel Source Organization
/usr/src/linux/

             arch/<arch>
                    mm
                  drivers

                     fs          char     mtd/ide       net     pci       serial    usb   ...
                   block
                    net
                  include
                                 linux     asm-<arch>

                  init      kernel       ipc      lib           scripts          tools

                  crypto       firmware        security       sound        ...

                          © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>                     6
                                         All Rights Reserved.
Show me the Source Code




 © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   7
                All Rights Reserved.
Kernel Build System
Key components
  Makefile
  Kconfig
Configuring the Makefile
  Setting up the kernel version (specially for the
  Desktops)
  For Cross Compilation, need to setup
    ARCH
    CROSS_COMPILE
  Or, invoke make with these options
            © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   8
                           All Rights Reserved.
Kernel Configuration
make config
make menuconfig
make xconfig
Others
 make defconfig
 make oldconfig
 make <specific>config


         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   9
                        All Rights Reserved.
Kernel Compilation
After configuring the kernel, we are all set to build it
Build Methods
  make vmlinux – To build everything configured for a kernel image
  make modules – To build only configured modules
  make – To build everything configured (kernel image & modules)
  make modules_prepare – To only prepare for building modules
Cleaning Methods
  make clean – Simple clean
  make mrproper – Complete sweep clean, incl. Configs




                © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>    10
                               All Rights Reserved.
Linux Kernel Images
Kernel Image should be understood by Stage 2 Bootloader
Default kernel compilation builds vmlinux
vmlinux is understood only by the desktop bootloaders
So, for embedded systems, we would typically have to do the
following
  Creating linux.bin using <cross>-objcopy
    Example: arm-linux-objcopy -O binary vmlinux linux.bin
  And then, convert it into the bootloader specific image using some
  bootloader utility. For u-boot, it is done using mkimage
    Example: mkimage -A arm -O linux -T kernel -C none -a 20008000 -e 20008000
    -n “Custom” -d linux.bin uImage.arm




                © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>                11
                               All Rights Reserved.
Powerful Kernel Arguments
console – Boot up & access interface
root – Base file system contents
mem – Limit the RAM usage
nfsroot – Base file system over nfs
ip – IP address on boot
...



        © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   12
                       All Rights Reserved.
Do we really need to build the kernel?

              Not really.
  Alternative: Use Modules instead.


       © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   13
                      All Rights Reserved.
W's of a Module?
Hot plug-n-play Driver
Dynamically Loadable & Unloadable
Linux – the first OS to have such a feature
Later many followed suit
Enables fast hacking cycle
File: <module>.ko (Kernel Object)
  <module>.o wrapped with kernel signature

        © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   14
                       All Rights Reserved.
Module Commands
lsmod – List modules
insmod <mod_file> – Load module
rmmod <module> – Unload module
modprobe <module> – Auto load module




        © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   15
                       All Rights Reserved.
The Module Constructor
static int __init mfd_init(void)
{


    ...


    return 0;
}
module_init(mfd_init);
                © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   16
                               All Rights Reserved.
The Module Destructor
static void __exit mfd_exit(void)
{


    ...


}
module_exit(mfd_exit);

            © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   17
                           All Rights Reserved.
Typical Makefile
ifeq (${KERNELRELEASE},)

       KERNEL_SOURCE := <kernel source directory path>

       PWD := $(shell pwd)

default:

       $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) modules

clean:

       $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) clean

else

       obj-m += <module>.o

endif




                       © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   18
                                      All Rights Reserved.
How to Hack?




© 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   19
               All Rights Reserved.
printk & syslogd
Header: <linux/kernel.h>
Arguments: Same as printf
Format Specifiers: All as in printf, except float & double related
Additionally, a initial 3 character sequence for Log Level
  KERN_EMERG       "<0>" /* system is unusable */
  KERN_ALERT      "<1>" /* action must be taken immediately */
  KERN_CRIT      "<2>" /* critical conditions */
  KERN_ERR       "<3>" /* error conditions */
  KERN_WARNING       "<4>" /* warning conditions */
  KERN_NOTICE      "<5>" /* normal but significant condition */
  KERN_INFO      "<6>" /* informational */
  KERN_DEBUG       "<7>" /* debug-level messages */


               © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>     20
                              All Rights Reserved.
Logs & Kernel Windows
Log View Commands
 dmesg | tail
 tail /var/log/messages
Kernel Windows
 /proc
 /sys
Peeping Commands
 cat <window_file>
 Utilities: sysfsutils, sysdiag
         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   21
                        All Rights Reserved.
Cool Kernel Windows
Trivial ones
  /proc/cpuinfo
  /proc/meminfo
  /proc/devices
  /proc/filesystems
  /proc/partitions
  /proc/interrupts
  /proc/softirqs
Hacking Experts
  /proc/kallsyms
  /proc/kcore
  /proc/iomem
  /proc/ioports
  /proc/bus/*/devices
  /sys/class
                     © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   22
                                    All Rights Reserved.
Kernel Probes
kprobes → CONFIG_KPROBES
jprobes → Specialized Kprobes
  For probing function entry points
kretprobes → Return Kprobes
  For probing function exit points




         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   23
                        All Rights Reserved.
Kernel Hacking Related Options
CONFIG_PRINTK_TIME
CONFIG_DEBUG_SLAB
 CONFIG_DEBUG_HIMEM, CONFIG_DEBUG_PAGE_ALLOC
CONFIG_DEBUG_SPINLOCK
CONFIG_MAGIC_SYSRQ (kdump related)
CONFIG_DETECT_SOFTLOCKUP
CONFIG_DEBUG_STACKOVERFLOW
CONFIG_DEBUG_STACK_USAGE
CONFIG_BUG
 CONFIG_DEBUG_BUGVERBOSE
CONFIG_KALLSYMS (for debugging oops using gdb)
 Under “General setup” → “Configure Std Kernel ... (for small systems)”
              © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>           24
                             All Rights Reserved.
Memory & Device Access

                                                               RAM
                                           Memory
                                           Controller
   32
                                      32

Data Bus          CPU               Address Bus
                                      32


                                             Bus
                                           Controller
                                                                  Device
               uController                                     Address Space
    32

           © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>                   25
                          All Rights Reserved.
Kernel Space Memory Access
Virtual Address on Physical Address
  Header: <linux/gfp.h>
    unsigned long __get_free_pages(flags, order); etc
    void free_pages(addr, order); etc
  Header: <linux/slab.h>
    void *kmalloc(size_t size, gfp_t flags);
       GFP_USER, GFP_KERNEL, GFP_DMA
    void kfree(void *obj);
  Header: <linux/vmalloc.h>
    void *vmalloc(unsigned long size);
    void vfree(void *addr);
           © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   26
                          All Rights Reserved.
Kernel Space Device Access
Virtual Address for Bus/IO Address
  Header: <asm/io.h>
    void *ioremap(phys_addr_t bus_addr, unsigned long size);
    void iounmap(void *addr);
I/O Memory Access
  Header: <asm/io.h>
    u[8|16|32] ioread[8|16|32](void *addr);
    void iowrite[8|16|32](u[8|16|32] value, void *addr);

Kernel Window: /proc/iomem

          © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>    27
                         All Rights Reserved.
x86 Hardware Architecture

                                                                        RAM
                                                    North
                          32                        Bridge

                                               32
              32
                               x86           Address Bus
               Data Bus
                               CPU
                                               32

I/O Ports /                      I/O Line

 Address                                            South
  Space                              16             Bridge               (PCI) Device
                          32                                            Address Space



                    © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>                   28
                                   All Rights Reserved.
I/O Access (x86* specific)
I/O Port Access
  u8 inb(unsigned long port);
  u16 inw(unsigned long port);
  u32 inl(unsigned long port);
  void outb(u8 value, unsigned long port);
  void outw(u16 value, unsigned long port);
  void outl(u32 value, unsigned long port);

Header: <asm/io.h>
Kernel Window: /proc/ioports

            © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   29
                           All Rights Reserved.
Hacking from User Space
Decoding Code
 objdump -d <object_file> – Disassemble
 nm <object_file> – List symbols
Tracing: strace [options] <command>
Decoding Bus Devices
 PCI – lspci [-v[v]]
 USB – lsusb [-v]


         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   30
                        All Rights Reserved.
What all have we learnt talked?
 Linux' Hacking Architecture
 Configuring & Compiling the Linux Kernel
 Boot Control using Kernel Boot Args
 Hacking Flexibility w/ Linux Modules
 Ready-made Hacking Tools & Techniques




         © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   31
                        All Rights Reserved.
Any Queries?




© 2012 Anil Kumar Pugalia <email@sarika-pugs.com>   32
               All Rights Reserved.
Contact Me
Mailing List
  computerclubin@googlegroups.com
Website
  http://www.sysplay.in
Email
  email@sarika-pugs.com
Twitter
  anil_pugalia
          © 2012 Anil Kumar Pugalia <email@sarika-pugs.com>
                         All Rights Reserved.
1 of 33

Recommended

Processes by
ProcessesProcesses
ProcessesAnil Kumar Pugalia
7K views33 slides
Linux Kernel Overview by
Linux Kernel OverviewLinux Kernel Overview
Linux Kernel OverviewAnil Kumar Pugalia
26.7K views20 slides
Kernel Debugging & Profiling by
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & ProfilingAnil Kumar Pugalia
18.8K views14 slides
Real Time Systems by
Real Time SystemsReal Time Systems
Real Time SystemsAnil Kumar Pugalia
17.7K views41 slides
I2C Drivers by
I2C DriversI2C Drivers
I2C DriversSysPlay eLearning Academy for You
28.8K views28 slides
Architecture Porting by
Architecture PortingArchitecture Porting
Architecture PortingAnil Kumar Pugalia
5K views12 slides

More Related Content

What's hot

Linux Porting by
Linux PortingLinux Porting
Linux PortingAnil Kumar Pugalia
17.5K views29 slides
Linux User Space Debugging & Profiling by
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingAnil Kumar Pugalia
6.5K views36 slides
Signals by
SignalsSignals
SignalsAnil Kumar Pugalia
9.8K views15 slides
BeagleBone Black Bootloaders by
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black BootloadersSysPlay eLearning Academy for You
4K views27 slides
Introduction to Linux by
Introduction to LinuxIntroduction to Linux
Introduction to LinuxAnil Kumar Pugalia
4K views33 slides
Embedded Storage Management by
Embedded Storage ManagementEmbedded Storage Management
Embedded Storage ManagementAnil Kumar Pugalia
4.1K views16 slides

What's hot(20)

Viewers also liked

Bootloaders by
BootloadersBootloaders
BootloadersAnil Kumar Pugalia
10K views19 slides
Board Bringup by
Board BringupBoard Bringup
Board BringupAnil Kumar Pugalia
28.7K views16 slides
Functional Programming with LISP by
Functional Programming with LISPFunctional Programming with LISP
Functional Programming with LISPAnil Kumar Pugalia
6.1K views23 slides
Shell Scripting by
Shell ScriptingShell Scripting
Shell ScriptingAnil Kumar Pugalia
6.2K views27 slides
Timers by
TimersTimers
TimersAnil Kumar Pugalia
6.5K views7 slides
System Calls by
System CallsSystem Calls
System CallsAnil Kumar Pugalia
9.7K views14 slides

Similar to Mobile Hacking using Linux Drivers

Introduction To Linux Kernel Modules by
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modulesdibyajyotig
1.9K views33 slides
淺談探索 Linux 系統設計之道 by
淺談探索 Linux 系統設計之道 淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道 National Cheng Kung University
11.2K views91 slides
Building by
BuildingBuilding
BuildingSatpal Parmar
1.5K views37 slides
Introduction to Linux Kernel Development by
Introduction to Linux Kernel DevelopmentIntroduction to Linux Kernel Development
Introduction to Linux Kernel DevelopmentLevente Kurusa
91 views28 slides
Introduction to lkm by
Introduction to lkmIntroduction to lkm
Introduction to lkmpradeep_tewani
35 views11 slides
Studienarb linux kernel-dev by
Studienarb linux kernel-devStudienarb linux kernel-dev
Studienarb linux kernel-devmurali_purushothaman
578 views10 slides

Similar to Mobile Hacking using Linux Drivers(20)

Introduction To Linux Kernel Modules by dibyajyotig
Introduction To Linux Kernel ModulesIntroduction To Linux Kernel Modules
Introduction To Linux Kernel Modules
dibyajyotig1.9K views
Introduction to Linux Kernel Development by Levente Kurusa
Introduction to Linux Kernel DevelopmentIntroduction to Linux Kernel Development
Introduction to Linux Kernel Development
Levente Kurusa91 views
Visão geral do hardware do servidor System z e Linux on z - Concurso Mainframe by Anderson Bassani
Visão geral do hardware do servidor System z e Linux on z - Concurso MainframeVisão geral do hardware do servidor System z e Linux on z - Concurso Mainframe
Visão geral do hardware do servidor System z e Linux on z - Concurso Mainframe
Anderson Bassani1.1K views
Oracle Solaris 11.1 New Features by Orgad Kimchi
Oracle Solaris 11.1 New FeaturesOracle Solaris 11.1 New Features
Oracle Solaris 11.1 New Features
Orgad Kimchi2.3K views
ABS 2012 - Android Device Porting Walkthrough by Benjamin Zores
ABS 2012 - Android Device Porting WalkthroughABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting Walkthrough
Benjamin Zores10.4K views
the NML project by Lei Yang
the NML projectthe NML project
the NML project
Lei Yang597 views
Tuning systemd for embedded by Alison Chaiken
Tuning systemd for embeddedTuning systemd for embedded
Tuning systemd for embedded
Alison Chaiken2.7K views
CloudNativeTurkey - Lines of Defence.pdf by Koray Oksay
CloudNativeTurkey - Lines of Defence.pdfCloudNativeTurkey - Lines of Defence.pdf
CloudNativeTurkey - Lines of Defence.pdf
Koray Oksay26 views
Automotive Grade Linux and systemd by Alison Chaiken
Automotive Grade Linux and systemdAutomotive Grade Linux and systemd
Automotive Grade Linux and systemd
Alison Chaiken1.6K views

More from Anil Kumar Pugalia

File System Modules by
File System ModulesFile System Modules
File System ModulesAnil Kumar Pugalia
21K views37 slides
System Calls by
System CallsSystem Calls
System CallsAnil Kumar Pugalia
4.2K views17 slides
Playing with R L C Circuits by
Playing with R L C CircuitsPlaying with R L C Circuits
Playing with R L C CircuitsAnil Kumar Pugalia
2.8K views17 slides
Audio Drivers by
Audio DriversAudio Drivers
Audio DriversAnil Kumar Pugalia
20.8K views11 slides
Power of vi by
Power of viPower of vi
Power of viAnil Kumar Pugalia
3K views9 slides
gcc and friends by
gcc and friendsgcc and friends
gcc and friendsAnil Kumar Pugalia
14.3K views11 slides

Recently uploaded

Spesifikasi Lengkap ASUS Vivobook Go 14 by
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14Dot Semarang
35 views1 slide
Info Session November 2023.pdf by
Info Session November 2023.pdfInfo Session November 2023.pdf
Info Session November 2023.pdfAleksandraKoprivica4
10 views15 slides
Report 2030 Digital Decade by
Report 2030 Digital DecadeReport 2030 Digital Decade
Report 2030 Digital DecadeMassimo Talia
14 views41 slides
AMAZON PRODUCT RESEARCH.pdf by
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdfJerikkLaureta
15 views13 slides
Piloting & Scaling Successfully With Microsoft Viva by
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft VivaRichard Harbridge
10 views160 slides
Special_edition_innovator_2023.pdf by
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdfWillDavies22
16 views6 slides

Recently uploaded(20)

Spesifikasi Lengkap ASUS Vivobook Go 14 by Dot Semarang
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14
Dot Semarang35 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta15 views
Piloting & Scaling Successfully With Microsoft Viva by Richard Harbridge
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft Viva
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2216 views
Case Study Copenhagen Energy and Business Central.pdf by Aitana
Case Study Copenhagen Energy and Business Central.pdfCase Study Copenhagen Energy and Business Central.pdf
Case Study Copenhagen Energy and Business Central.pdf
Aitana12 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software225 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Unit 1_Lecture 2_Physical Design of IoT.pdf by StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec11 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10209 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi120 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker26 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn19 views

Mobile Hacking using Linux Drivers

  • 1. Mobile Hacking through Linux Drivers © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> All Rights Reserved.
  • 2. What to Expect? Objective Usual Linux Kernel Hacking Techniques Tools to do Reverse-engineering Assumptions Linux Kernel is already ported onto a Mobile Getting into the mobile has been figured out © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 2 All Rights Reserved.
  • 3. The Hacking Architecture User Space (provides interface for hacking) Kernel Space (provides functionalities & facilities to hack) Hardware (is what needs Hacking) System Call I/F (the connector) © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 3 All Rights Reserved.
  • 4. Kernel Space Functionality Process Management Memory Management Device Management Storage Management Network Management © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 4 All Rights Reserved.
  • 5. Kernel Driver Ecosystem bash gvim X Server ssh gcc firefox Process Memory Device File Systems Networking Management Management Control Concurrency Virtual Ttys & Files & Dirs: Connectivity MultiTasking Memory Device Access The VFS Architecture Character Filesystem Network Memory Dependent Drivers Layer Subsystem Manager Code & Block Layer Interface Friends & Drivers Drivers Hardware Protocol Layers like PCI, USB, I2C, RS232, ... Consoles, Disks & Network CPU Memory ` etc CDs Interfaces © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 5 All Rights Reserved.
  • 6. Kernel Source Organization /usr/src/linux/ arch/<arch> mm drivers fs char mtd/ide net pci serial usb ... block net include linux asm-<arch> init kernel ipc lib scripts tools crypto firmware security sound ... © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 6 All Rights Reserved.
  • 7. Show me the Source Code © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 7 All Rights Reserved.
  • 8. Kernel Build System Key components Makefile Kconfig Configuring the Makefile Setting up the kernel version (specially for the Desktops) For Cross Compilation, need to setup ARCH CROSS_COMPILE Or, invoke make with these options © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 8 All Rights Reserved.
  • 9. Kernel Configuration make config make menuconfig make xconfig Others make defconfig make oldconfig make <specific>config © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 9 All Rights Reserved.
  • 10. Kernel Compilation After configuring the kernel, we are all set to build it Build Methods make vmlinux – To build everything configured for a kernel image make modules – To build only configured modules make – To build everything configured (kernel image & modules) make modules_prepare – To only prepare for building modules Cleaning Methods make clean – Simple clean make mrproper – Complete sweep clean, incl. Configs © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 10 All Rights Reserved.
  • 11. Linux Kernel Images Kernel Image should be understood by Stage 2 Bootloader Default kernel compilation builds vmlinux vmlinux is understood only by the desktop bootloaders So, for embedded systems, we would typically have to do the following Creating linux.bin using <cross>-objcopy Example: arm-linux-objcopy -O binary vmlinux linux.bin And then, convert it into the bootloader specific image using some bootloader utility. For u-boot, it is done using mkimage Example: mkimage -A arm -O linux -T kernel -C none -a 20008000 -e 20008000 -n “Custom” -d linux.bin uImage.arm © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 11 All Rights Reserved.
  • 12. Powerful Kernel Arguments console – Boot up & access interface root – Base file system contents mem – Limit the RAM usage nfsroot – Base file system over nfs ip – IP address on boot ... © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 12 All Rights Reserved.
  • 13. Do we really need to build the kernel? Not really. Alternative: Use Modules instead. © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 13 All Rights Reserved.
  • 14. W's of a Module? Hot plug-n-play Driver Dynamically Loadable & Unloadable Linux – the first OS to have such a feature Later many followed suit Enables fast hacking cycle File: <module>.ko (Kernel Object) <module>.o wrapped with kernel signature © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 14 All Rights Reserved.
  • 15. Module Commands lsmod – List modules insmod <mod_file> – Load module rmmod <module> – Unload module modprobe <module> – Auto load module © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 15 All Rights Reserved.
  • 16. The Module Constructor static int __init mfd_init(void) { ... return 0; } module_init(mfd_init); © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 16 All Rights Reserved.
  • 17. The Module Destructor static void __exit mfd_exit(void) { ... } module_exit(mfd_exit); © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 17 All Rights Reserved.
  • 18. Typical Makefile ifeq (${KERNELRELEASE},) KERNEL_SOURCE := <kernel source directory path> PWD := $(shell pwd) default: $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) modules clean: $(MAKE) -C ${KERNEL_SOURCE} SUBDIRS=$(PWD) clean else obj-m += <module>.o endif © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 18 All Rights Reserved.
  • 19. How to Hack? © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 19 All Rights Reserved.
  • 20. printk & syslogd Header: <linux/kernel.h> Arguments: Same as printf Format Specifiers: All as in printf, except float & double related Additionally, a initial 3 character sequence for Log Level KERN_EMERG "<0>" /* system is unusable */ KERN_ALERT "<1>" /* action must be taken immediately */ KERN_CRIT "<2>" /* critical conditions */ KERN_ERR "<3>" /* error conditions */ KERN_WARNING "<4>" /* warning conditions */ KERN_NOTICE "<5>" /* normal but significant condition */ KERN_INFO "<6>" /* informational */ KERN_DEBUG "<7>" /* debug-level messages */ © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 20 All Rights Reserved.
  • 21. Logs & Kernel Windows Log View Commands dmesg | tail tail /var/log/messages Kernel Windows /proc /sys Peeping Commands cat <window_file> Utilities: sysfsutils, sysdiag © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 21 All Rights Reserved.
  • 22. Cool Kernel Windows Trivial ones /proc/cpuinfo /proc/meminfo /proc/devices /proc/filesystems /proc/partitions /proc/interrupts /proc/softirqs Hacking Experts /proc/kallsyms /proc/kcore /proc/iomem /proc/ioports /proc/bus/*/devices /sys/class © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 22 All Rights Reserved.
  • 23. Kernel Probes kprobes → CONFIG_KPROBES jprobes → Specialized Kprobes For probing function entry points kretprobes → Return Kprobes For probing function exit points © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 23 All Rights Reserved.
  • 24. Kernel Hacking Related Options CONFIG_PRINTK_TIME CONFIG_DEBUG_SLAB CONFIG_DEBUG_HIMEM, CONFIG_DEBUG_PAGE_ALLOC CONFIG_DEBUG_SPINLOCK CONFIG_MAGIC_SYSRQ (kdump related) CONFIG_DETECT_SOFTLOCKUP CONFIG_DEBUG_STACKOVERFLOW CONFIG_DEBUG_STACK_USAGE CONFIG_BUG CONFIG_DEBUG_BUGVERBOSE CONFIG_KALLSYMS (for debugging oops using gdb) Under “General setup” → “Configure Std Kernel ... (for small systems)” © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 24 All Rights Reserved.
  • 25. Memory & Device Access RAM Memory Controller 32 32 Data Bus CPU Address Bus 32 Bus Controller Device uController Address Space 32 © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 25 All Rights Reserved.
  • 26. Kernel Space Memory Access Virtual Address on Physical Address Header: <linux/gfp.h> unsigned long __get_free_pages(flags, order); etc void free_pages(addr, order); etc Header: <linux/slab.h> void *kmalloc(size_t size, gfp_t flags); GFP_USER, GFP_KERNEL, GFP_DMA void kfree(void *obj); Header: <linux/vmalloc.h> void *vmalloc(unsigned long size); void vfree(void *addr); © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 26 All Rights Reserved.
  • 27. Kernel Space Device Access Virtual Address for Bus/IO Address Header: <asm/io.h> void *ioremap(phys_addr_t bus_addr, unsigned long size); void iounmap(void *addr); I/O Memory Access Header: <asm/io.h> u[8|16|32] ioread[8|16|32](void *addr); void iowrite[8|16|32](u[8|16|32] value, void *addr); Kernel Window: /proc/iomem © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 27 All Rights Reserved.
  • 28. x86 Hardware Architecture RAM North 32 Bridge 32 32 x86 Address Bus Data Bus CPU 32 I/O Ports / I/O Line Address South Space 16 Bridge (PCI) Device 32 Address Space © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 28 All Rights Reserved.
  • 29. I/O Access (x86* specific) I/O Port Access u8 inb(unsigned long port); u16 inw(unsigned long port); u32 inl(unsigned long port); void outb(u8 value, unsigned long port); void outw(u16 value, unsigned long port); void outl(u32 value, unsigned long port); Header: <asm/io.h> Kernel Window: /proc/ioports © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 29 All Rights Reserved.
  • 30. Hacking from User Space Decoding Code objdump -d <object_file> – Disassemble nm <object_file> – List symbols Tracing: strace [options] <command> Decoding Bus Devices PCI – lspci [-v[v]] USB – lsusb [-v] © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 30 All Rights Reserved.
  • 31. What all have we learnt talked? Linux' Hacking Architecture Configuring & Compiling the Linux Kernel Boot Control using Kernel Boot Args Hacking Flexibility w/ Linux Modules Ready-made Hacking Tools & Techniques © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 31 All Rights Reserved.
  • 32. Any Queries? © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> 32 All Rights Reserved.
  • 33. Contact Me Mailing List computerclubin@googlegroups.com Website http://www.sysplay.in Email email@sarika-pugs.com Twitter anil_pugalia © 2012 Anil Kumar Pugalia <email@sarika-pugs.com> All Rights Reserved.