SlideShare a Scribd company logo
- WonoKaerun -




Indonesian Security Conference 2011
Palcomtech – Palembang

16-17 Juli 2011
   InfoSec Enthusiast
   Independent IT Security Researcher
   Slackware & FreeBSD Hobbiest
   Still.. a Lazy Student #FYM ;)




                                     T : @sukebett
                       M : dante at indiefinite.com
   Introduction
   Definition
   Classification
   Main Contents
   Demo
   Conclusion
   Rootkit




              Source: http://www.flickr.com/photos/jraptor/4459405455/
   Ring0




            Source: http://www.imdb.com/title/tt0235712/
   Ring0




            Source: http://www.acm.uiuc.edu/projects/RingCycle/wiki/ProtectionModel
   Ring0 Levels Rootkit

    “Rootkits that
     are running at
     Kernel Mode!”




                           Source: http://www.rayheffer.com/139/running-rings-around-virtualisation/
1. LKM Based Rootkit
2. Non-LKM Based Rootkit

- So, What is LKM (Loadable Kernel Module)?




                               Source: http://www.ragepk.com/fn 5.7 Millimeter Pistol.html
1.a. Hooking System Call Table Address




                          Source: http://www.slideshare.net/fisher.w.y/rootkit-on-linux-x86-v26
   Historically,   LKM-based    rootkits  used   the
    „sys_call_table[]‟ symbol to perform hooks on the
    system calls

    sys_call_table[__NR_sc] = (void *) hacked_sc_ptr;


   However, since sys_call_table[] is not an exported
    symbol anymore, this code isn‟t valid

   We need another way to find „sys_call_table`[]
1.b. Finding SysCallTable Address
 1. Get the IDTR using SIDT

 2. Extract the IDT address from the IDTR

 3. Get the address of „system_call‟ from the
    0x80th entry of the IDT

 4. Search „system_call‟ for our code fingerprint

 5. Finally, we should have the address of
    „sys_call_table[]‟ !
1.c. Bypass WP (Write Protection)

 - Problem : sys_call_table[] is read-only!
 - Solution : We must clear 16th bit of cr0!

    static void disable_wp_cr0 (void) {
    unsigned long value;
              asm volatile("mov %%cr0,%0" : "=r" (value));
    if (value & 0x00010000) {
                       value &= ~0x00010000;
              asm volatile("mov %0,%%cr0": : "r" (value));
              }
    }
1.d. On x86_64

 - Actually this is NOT new architecture, it‟s just
 specifically different in memory addresing plus
 with additional of new CPU instructions.

 - We can find sys_call_table[] by bruteforcing in
 range memory address between:
 [0xffffffff00000000 – 0xffffffffffffffff]
1.e. Capabilities

 -   Hiding File/Directory
 -   Hiding Process
 -   Hiding Network Traffic
 -   Sniffing
 -   Keylogging
 -   Etc..
1.f. References

 - http://thc.org/papers/LKM_HACKING.html
 - http://www.phrack.org/issues.html?issue=52&id=18
 - http://www.slideshare.net/fisher.w.y/rootkit-on-
 linux-x86-v26
 - http://www.exploit-db.com/papers/13146/
2.a. IDT(Interrupt Descriptor Table) Handling

  - Interrupt: “An event that alters the sequence
  of instructions executed by a processor. Such
  events correspond to electrical signals generated
  by hardware circuits both inside and outside of
  the CPU chip.” (Understanding the Linux kernel ,O‟reilly)

  - The IDT is a linear table of 256 entries which
  associates an interrupt handler with each
  interrupt vector, and each entry of the IDT is a
  descriptor of 8 bytes which blows the entire IDT
  up to a size of 256 * 8 = 2048 bytes.
2.b. Hijacking Methods

 1. Create a fake IDT handler
 2. Copy our handler's address into new_addr
 3. Make the idt variable point on the first IDT
    descriptor, via idt, idtr dan sidt.
   (Ref. Phrack 58 article 7)
 4. Save the old handler's address
   (with get_stub_from_idt() function)
 5. new_addr contain our handler's address!
References


 - http://www.phrack.org/issues.html?issue=59&id=4
 - http://codenull.net/articles/kmh_en.html
 - http://burrowscode.wordpress.com/2010/06/23/idt-
 hookingunhooking-module/
3.a. VFS(Virtual File System) Hacking

 - VFS and /proc
   1. It is a filesystem
   2. It lives completely in kernel memory

 - All access from the userland is limited to the
 functionality of VFS layer provided by the kernel,
 namely read, write, open and alike system calls .

 - So, how the kernel can be backdoored without
 changing system calls?
3.b. System Call Flow in VFS Hijacking




                        Source: http://www.porcupine.org/forensics/forensic-discovery/chapter5.html
References


 - http://www.phrack.org/issues.html?issue=58&id=6
 - http://www.phrack.org/issues.html?issue=61&id=14
 - http://www.trapkit.de/research/rkprofiler/rkplx/rkplx.html
4.a Page Fault Handler Hijacking

 - “A page fault exception is raised when the
 addressed page is not present in memory, the
 corresponding page table entry is null or a
 violation of the paging protection mechanism has
 occurred.” (Underdstanding The Linux Kernel, O‟reilly)
 - When? -> The kernel attempts to address a
 page belonging to the process address space, but
 either the corresponding page frame does not
 exist (Demand Paging) or the kernel is trying to
 write a read-only page.
4.b. Schema on Page Fault Hijacking Process




            Source: http://book.opensourceproject.org.cn/kernel/kernel3rd/opensource/0596005652/understandlk-chp-9-sect-4.html6
4.c. References

 - http://www.phrack.org/issues.html?issue=61&id=7
 - http://www.s0ftpj.org/bfi/dev/en/BFi12-dev-08-en
 - http://whatisthekernel.blogspot.com/2005/09/back-
 door-entry-getting-hold-of-kernel_01.html
5.a. Abusing Debug Register

  “The IA-32 architecture provides extensive debugging
 facilities for use in debugging code and monitoring code
 execution and processor performance. These facilities
 are valuable for debugging applications software,
 system software, and multitasking operating systems.”

 - A debug exception (#DB) is generated when a
 memory or I/O access is made to one of these
 breakpoint addresses.

 - There are 8 debug registers supported by the Intel
 processors, which control the debug operation of the
 processor (dr0-dr7).
5.b. Debug Register Address




                      Source: http://www.slideshare.net/fisher.w.y/rootkit-on-linux-x86-v26
5.c. References

 - http://www.phrack.org/issues.html?issue=65&id=8
 - http://seclists.org/dailydave/2008/q3/224
 - http://l33ckma.tuxfamily.org/?p=174
 - http://darkangel.antifork.org/publications/Abuso
 dell'Hardware nell'Attacco al Kernel di Linux.pdf
 - http://packetstormsecurity.org/files/view/57016/
 mood-nt_2.3.tgz
6.a. Kernel Instrumentation Patching

 - Kprobe “Simple method to probe the running
 kernel. At a fundamental level, it requires the address
 of a kernel function that needs to be debugged”.

 - Jprobe “Jprobe is another kind of probing
 technique, which can be used to access the target
 function‟s arguments, and thus display what was
 passed to the function”.

 - Kretprobes “A return probe fires when a specified
 function returns ”.
6.b. Schema of Kprobe and Jprobe Execution




       Kprobes Flow Execution




                                Jprobes Flow Execution
6.c. References

 - http://www.phrack.org/issues.html?issue=67&id=6
 - http://www.chunghwan.com/systems/gaining-
 insight-into-the-linux-kernel-with-kprobes/
 - http://lxr.osuosl.org/source/Documentation/
 kprobes.txt
   Hiding Modules

    - if(m->init == init_module)
       list_del(&m->list);
    - kobject_unregister(&m->mkobj.kobj);
       //kobject_del for < Kernel 2.6.7
   Non-LKM Rootkits

    - Via /dev/kmem
    - Via /dev/mem
    - How about /dev/port?
IT’S SHOW TIME!

   No POC = HOAX!
“Any rootkit created with existing detection
capabilities in mind will evade the protective
measures provided by such systems. Warfare at
kernel level comes down to a question of who
takes over first – the rootkit or the anti-rootkit
solution.”
         (http://www.securelist.com/en/analysis?pubid=204792011)
“Subtle and insubstantial, the expert leaves no
trace; divinely mysterious, he is inaudible. Thus,
he is the master of his enemy's fate.”
                                   - The Art of War, Sun Tzu

More Related Content

What's hot (20)

PDF
YOW2021 Computing Performance
Brendan Gregg
 
PDF
re:Invent 2019 BPF Performance Analysis at Netflix
Brendan Gregg
 
PDF
Performance Wins with eBPF: Getting Started (2021)
Brendan Gregg
 
PDF
BPF Tools 2017
Brendan Gregg
 
PDF
Debugging Hung Python Processes With GDB
bmbouter
 
PDF
Container Performance Analysis
Brendan Gregg
 
PDF
eBPF Trace from Kernel to Userspace
SUSE Labs Taipei
 
PDF
eBPF Perf Tools 2019
Brendan Gregg
 
PDF
Security Monitoring with eBPF
Alex Maestretti
 
PDF
YOW2020 Linux Systems Performance
Brendan Gregg
 
PDF
BPF Internals (eBPF)
Brendan Gregg
 
ODP
Linux kernel tracing superpowers in the cloud
Andrea Righi
 
PDF
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Brendan Gregg
 
PDF
LPC2019 BPF Tracing Tools
Brendan Gregg
 
PDF
ATO Linux Performance 2018
Brendan Gregg
 
PDF
Velocity 2017 Performance analysis superpowers with Linux eBPF
Brendan Gregg
 
POTX
Performance Tuning EC2 Instances
Brendan Gregg
 
PDF
USENIX ATC 2017: Visualizing Performance with Flame Graphs
Brendan Gregg
 
PDF
Solaris Kernel Debugging V1.0
Jarod Wang
 
PDF
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Valeriy Kravchuk
 
YOW2021 Computing Performance
Brendan Gregg
 
re:Invent 2019 BPF Performance Analysis at Netflix
Brendan Gregg
 
Performance Wins with eBPF: Getting Started (2021)
Brendan Gregg
 
BPF Tools 2017
Brendan Gregg
 
Debugging Hung Python Processes With GDB
bmbouter
 
Container Performance Analysis
Brendan Gregg
 
eBPF Trace from Kernel to Userspace
SUSE Labs Taipei
 
eBPF Perf Tools 2019
Brendan Gregg
 
Security Monitoring with eBPF
Alex Maestretti
 
YOW2020 Linux Systems Performance
Brendan Gregg
 
BPF Internals (eBPF)
Brendan Gregg
 
Linux kernel tracing superpowers in the cloud
Andrea Righi
 
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Brendan Gregg
 
LPC2019 BPF Tracing Tools
Brendan Gregg
 
ATO Linux Performance 2018
Brendan Gregg
 
Velocity 2017 Performance analysis superpowers with Linux eBPF
Brendan Gregg
 
Performance Tuning EC2 Instances
Brendan Gregg
 
USENIX ATC 2017: Visualizing Performance with Flame Graphs
Brendan Gregg
 
Solaris Kernel Debugging V1.0
Jarod Wang
 
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
Valeriy Kravchuk
 

Similar to Linux kernel-rootkit-dev - Wonokaerun (20)

PDF
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NoSuchCon
 
PDF
Auditing the Opensource Kernels
Silvio Cesare
 
PDF
Securing Applications and Pipelines on a Container Platform
All Things Open
 
PDF
Osquery
Animesh Roy
 
PPTX
Attack on the Core
Peter Hlavaty
 
PDF
Linux Foundation Mentorship Sessions - Kernel Livepatch: An Introduction
Marcos de Souza
 
PDF
DefCon 2012 - Rooting SOHO Routers
Michael Smith
 
PDF
Formbook - In-depth malware analysis (Botconf 2018)
Rémi Jullian
 
PDF
Linux Integrity Mechanisms - Protecting Container Runtime as an example
Clay (Chih-Hao) Chang
 
PPTX
Secure container: Kata container and gVisor
Ching-Hsuan Yen
 
PPTX
Linux Kernel Tour
samrat das
 
PDF
Docker Runtime Security
Sysdig
 
PDF
Securing Applications and Pipelines on a Container Platform
All Things Open
 
PDF
Android memory analysis Debug slides.pdf
VishalKumarJha10
 
PDF
Tokyo OpenStack Summit 2015: Unraveling Docker Security
Phil Estes
 
PDF
Unraveling Docker Security: Lessons From a Production Cloud
Salman Baset
 
PDF
Introduction To Linux Kernel Modules
dibyajyotig
 
PPTX
Container & kubernetes
Ted Jung
 
PDF
Container Runtime Security with Falco
Michael Ducy
 
PPT
Linux Device Driver for Writing a real world driver for embedded Linux
AchyuthShettigar2
 
NSC #2 - D3 02 - Peter Hlavaty - Attack on the Core
NoSuchCon
 
Auditing the Opensource Kernels
Silvio Cesare
 
Securing Applications and Pipelines on a Container Platform
All Things Open
 
Osquery
Animesh Roy
 
Attack on the Core
Peter Hlavaty
 
Linux Foundation Mentorship Sessions - Kernel Livepatch: An Introduction
Marcos de Souza
 
DefCon 2012 - Rooting SOHO Routers
Michael Smith
 
Formbook - In-depth malware analysis (Botconf 2018)
Rémi Jullian
 
Linux Integrity Mechanisms - Protecting Container Runtime as an example
Clay (Chih-Hao) Chang
 
Secure container: Kata container and gVisor
Ching-Hsuan Yen
 
Linux Kernel Tour
samrat das
 
Docker Runtime Security
Sysdig
 
Securing Applications and Pipelines on a Container Platform
All Things Open
 
Android memory analysis Debug slides.pdf
VishalKumarJha10
 
Tokyo OpenStack Summit 2015: Unraveling Docker Security
Phil Estes
 
Unraveling Docker Security: Lessons From a Production Cloud
Salman Baset
 
Introduction To Linux Kernel Modules
dibyajyotig
 
Container & kubernetes
Ted Jung
 
Container Runtime Security with Falco
Michael Ducy
 
Linux Device Driver for Writing a real world driver for embedded Linux
AchyuthShettigar2
 
Ad

More from idsecconf (20)

PDF
IDSECCONF2024 Capture The FLag Write up - 3 MAS MAS
idsecconf
 
PDF
IDSECCONF2024 - Rifqi Hilmy Zhafrant - Hunting and Exploiting GraphQL Vulnera...
idsecconf
 
PDF
IDSECCONF2024 - Arief Karfianto - AI-Enhanced Security Analysis in Requiremen...
idsecconf
 
PDF
IDSECCONF2024 - Ryan Fabella, Daniel Dhaniswara - Keamanan Siber Pada Kendara...
idsecconf
 
PDF
IDSECCONF2024 - Angela Oryza - ITS Nabu-Platform Pelatihan Keamanan Siber den...
idsecconf
 
PDF
IDSECCONF2024 - Rama Tri Nanda - MQTT hacking, RCE in Smart Router.pdf
idsecconf
 
PDF
IDSECCONF2024 - Muhammad Dwison - The Implementation Of One Pixel Attack To S...
idsecconf
 
PDF
IDSECCONF2024 - Kang Ali - Local LLM can Simulate Apt Malware With Jailbreak ...
idsecconf
 
PDF
IDSECCONF2024 - Brian Nasywa - Comparison of Quantum Key Distribution Protoco...
idsecconf
 
PDF
idsecconf2023 - Mochammad Riyan Firmansyah - Takeover Cloud Managed Router vi...
idsecconf
 
PDF
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf
 
PDF
idsecconf2023 - Mangatas Tondang, Wahyu Nuryanto - Penerapan Model Detection ...
idsecconf
 
PDF
idsecconf2023 - Rama Tri Nanda - Hacking Smart Doorbell.pdf
idsecconf
 
PDF
idsecconf2023 - Akshantula Neha, Mohammad Febri Ramadlan - Cyber Harmony Auto...
idsecconf
 
PDF
idsecconf2023 - Aan Wahyu - Hide n seek with android app protections and beat...
idsecconf
 
PDF
idsecconf2023 - Satria Ady Pradana - Launch into the Stratus-phere Adversary ...
idsecconf
 
PDF
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
idsecconf
 
PDF
Muh. Fani Akbar - Infiltrate Into Your AWS Cloud Environment Through Public E...
idsecconf
 
PDF
Rama Tri Nanda - NFC Hacking Hacking NFC Reverse Power Supply Padlock.pdf
idsecconf
 
PDF
Arief Karfianto - Proposed Security Model for Protecting Patients Data in Ele...
idsecconf
 
IDSECCONF2024 Capture The FLag Write up - 3 MAS MAS
idsecconf
 
IDSECCONF2024 - Rifqi Hilmy Zhafrant - Hunting and Exploiting GraphQL Vulnera...
idsecconf
 
IDSECCONF2024 - Arief Karfianto - AI-Enhanced Security Analysis in Requiremen...
idsecconf
 
IDSECCONF2024 - Ryan Fabella, Daniel Dhaniswara - Keamanan Siber Pada Kendara...
idsecconf
 
IDSECCONF2024 - Angela Oryza - ITS Nabu-Platform Pelatihan Keamanan Siber den...
idsecconf
 
IDSECCONF2024 - Rama Tri Nanda - MQTT hacking, RCE in Smart Router.pdf
idsecconf
 
IDSECCONF2024 - Muhammad Dwison - The Implementation Of One Pixel Attack To S...
idsecconf
 
IDSECCONF2024 - Kang Ali - Local LLM can Simulate Apt Malware With Jailbreak ...
idsecconf
 
IDSECCONF2024 - Brian Nasywa - Comparison of Quantum Key Distribution Protoco...
idsecconf
 
idsecconf2023 - Mochammad Riyan Firmansyah - Takeover Cloud Managed Router vi...
idsecconf
 
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf
 
idsecconf2023 - Mangatas Tondang, Wahyu Nuryanto - Penerapan Model Detection ...
idsecconf
 
idsecconf2023 - Rama Tri Nanda - Hacking Smart Doorbell.pdf
idsecconf
 
idsecconf2023 - Akshantula Neha, Mohammad Febri Ramadlan - Cyber Harmony Auto...
idsecconf
 
idsecconf2023 - Aan Wahyu - Hide n seek with android app protections and beat...
idsecconf
 
idsecconf2023 - Satria Ady Pradana - Launch into the Stratus-phere Adversary ...
idsecconf
 
Ali - The Journey-Hack Electron App Desktop (MacOS).pdf
idsecconf
 
Muh. Fani Akbar - Infiltrate Into Your AWS Cloud Environment Through Public E...
idsecconf
 
Rama Tri Nanda - NFC Hacking Hacking NFC Reverse Power Supply Padlock.pdf
idsecconf
 
Arief Karfianto - Proposed Security Model for Protecting Patients Data in Ele...
idsecconf
 
Ad

Recently uploaded (20)

PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 

Linux kernel-rootkit-dev - Wonokaerun

  • 1. - WonoKaerun - Indonesian Security Conference 2011 Palcomtech – Palembang 16-17 Juli 2011
  • 2. InfoSec Enthusiast  Independent IT Security Researcher  Slackware & FreeBSD Hobbiest  Still.. a Lazy Student #FYM ;) T : @sukebett M : dante at indiefinite.com
  • 3. Introduction  Definition  Classification  Main Contents  Demo  Conclusion
  • 4. Rootkit Source: http://www.flickr.com/photos/jraptor/4459405455/
  • 5. Ring0 Source: http://www.imdb.com/title/tt0235712/
  • 6. Ring0 Source: http://www.acm.uiuc.edu/projects/RingCycle/wiki/ProtectionModel
  • 7. Ring0 Levels Rootkit “Rootkits that are running at Kernel Mode!” Source: http://www.rayheffer.com/139/running-rings-around-virtualisation/
  • 8. 1. LKM Based Rootkit 2. Non-LKM Based Rootkit - So, What is LKM (Loadable Kernel Module)? Source: http://www.ragepk.com/fn 5.7 Millimeter Pistol.html
  • 9. 1.a. Hooking System Call Table Address Source: http://www.slideshare.net/fisher.w.y/rootkit-on-linux-x86-v26
  • 10. Historically, LKM-based rootkits used the „sys_call_table[]‟ symbol to perform hooks on the system calls sys_call_table[__NR_sc] = (void *) hacked_sc_ptr;  However, since sys_call_table[] is not an exported symbol anymore, this code isn‟t valid  We need another way to find „sys_call_table`[]
  • 11. 1.b. Finding SysCallTable Address 1. Get the IDTR using SIDT 2. Extract the IDT address from the IDTR 3. Get the address of „system_call‟ from the 0x80th entry of the IDT 4. Search „system_call‟ for our code fingerprint 5. Finally, we should have the address of „sys_call_table[]‟ !
  • 12. 1.c. Bypass WP (Write Protection) - Problem : sys_call_table[] is read-only! - Solution : We must clear 16th bit of cr0! static void disable_wp_cr0 (void) { unsigned long value; asm volatile("mov %%cr0,%0" : "=r" (value)); if (value & 0x00010000) { value &= ~0x00010000; asm volatile("mov %0,%%cr0": : "r" (value)); } }
  • 13. 1.d. On x86_64 - Actually this is NOT new architecture, it‟s just specifically different in memory addresing plus with additional of new CPU instructions. - We can find sys_call_table[] by bruteforcing in range memory address between: [0xffffffff00000000 – 0xffffffffffffffff]
  • 14. 1.e. Capabilities - Hiding File/Directory - Hiding Process - Hiding Network Traffic - Sniffing - Keylogging - Etc..
  • 15. 1.f. References - http://thc.org/papers/LKM_HACKING.html - http://www.phrack.org/issues.html?issue=52&id=18 - http://www.slideshare.net/fisher.w.y/rootkit-on- linux-x86-v26 - http://www.exploit-db.com/papers/13146/
  • 16. 2.a. IDT(Interrupt Descriptor Table) Handling - Interrupt: “An event that alters the sequence of instructions executed by a processor. Such events correspond to electrical signals generated by hardware circuits both inside and outside of the CPU chip.” (Understanding the Linux kernel ,O‟reilly) - The IDT is a linear table of 256 entries which associates an interrupt handler with each interrupt vector, and each entry of the IDT is a descriptor of 8 bytes which blows the entire IDT up to a size of 256 * 8 = 2048 bytes.
  • 17. 2.b. Hijacking Methods 1. Create a fake IDT handler 2. Copy our handler's address into new_addr 3. Make the idt variable point on the first IDT descriptor, via idt, idtr dan sidt. (Ref. Phrack 58 article 7) 4. Save the old handler's address (with get_stub_from_idt() function) 5. new_addr contain our handler's address!
  • 18. References - http://www.phrack.org/issues.html?issue=59&id=4 - http://codenull.net/articles/kmh_en.html - http://burrowscode.wordpress.com/2010/06/23/idt- hookingunhooking-module/
  • 19. 3.a. VFS(Virtual File System) Hacking - VFS and /proc 1. It is a filesystem 2. It lives completely in kernel memory - All access from the userland is limited to the functionality of VFS layer provided by the kernel, namely read, write, open and alike system calls . - So, how the kernel can be backdoored without changing system calls?
  • 20. 3.b. System Call Flow in VFS Hijacking Source: http://www.porcupine.org/forensics/forensic-discovery/chapter5.html
  • 21. References - http://www.phrack.org/issues.html?issue=58&id=6 - http://www.phrack.org/issues.html?issue=61&id=14 - http://www.trapkit.de/research/rkprofiler/rkplx/rkplx.html
  • 22. 4.a Page Fault Handler Hijacking - “A page fault exception is raised when the addressed page is not present in memory, the corresponding page table entry is null or a violation of the paging protection mechanism has occurred.” (Underdstanding The Linux Kernel, O‟reilly) - When? -> The kernel attempts to address a page belonging to the process address space, but either the corresponding page frame does not exist (Demand Paging) or the kernel is trying to write a read-only page.
  • 23. 4.b. Schema on Page Fault Hijacking Process Source: http://book.opensourceproject.org.cn/kernel/kernel3rd/opensource/0596005652/understandlk-chp-9-sect-4.html6
  • 24. 4.c. References - http://www.phrack.org/issues.html?issue=61&id=7 - http://www.s0ftpj.org/bfi/dev/en/BFi12-dev-08-en - http://whatisthekernel.blogspot.com/2005/09/back- door-entry-getting-hold-of-kernel_01.html
  • 25. 5.a. Abusing Debug Register “The IA-32 architecture provides extensive debugging facilities for use in debugging code and monitoring code execution and processor performance. These facilities are valuable for debugging applications software, system software, and multitasking operating systems.” - A debug exception (#DB) is generated when a memory or I/O access is made to one of these breakpoint addresses. - There are 8 debug registers supported by the Intel processors, which control the debug operation of the processor (dr0-dr7).
  • 26. 5.b. Debug Register Address Source: http://www.slideshare.net/fisher.w.y/rootkit-on-linux-x86-v26
  • 27. 5.c. References - http://www.phrack.org/issues.html?issue=65&id=8 - http://seclists.org/dailydave/2008/q3/224 - http://l33ckma.tuxfamily.org/?p=174 - http://darkangel.antifork.org/publications/Abuso dell'Hardware nell'Attacco al Kernel di Linux.pdf - http://packetstormsecurity.org/files/view/57016/ mood-nt_2.3.tgz
  • 28. 6.a. Kernel Instrumentation Patching - Kprobe “Simple method to probe the running kernel. At a fundamental level, it requires the address of a kernel function that needs to be debugged”. - Jprobe “Jprobe is another kind of probing technique, which can be used to access the target function‟s arguments, and thus display what was passed to the function”. - Kretprobes “A return probe fires when a specified function returns ”.
  • 29. 6.b. Schema of Kprobe and Jprobe Execution Kprobes Flow Execution Jprobes Flow Execution
  • 30. 6.c. References - http://www.phrack.org/issues.html?issue=67&id=6 - http://www.chunghwan.com/systems/gaining- insight-into-the-linux-kernel-with-kprobes/ - http://lxr.osuosl.org/source/Documentation/ kprobes.txt
  • 31. Hiding Modules - if(m->init == init_module) list_del(&m->list); - kobject_unregister(&m->mkobj.kobj); //kobject_del for < Kernel 2.6.7
  • 32. Non-LKM Rootkits - Via /dev/kmem - Via /dev/mem - How about /dev/port?
  • 33. IT’S SHOW TIME! No POC = HOAX!
  • 34. “Any rootkit created with existing detection capabilities in mind will evade the protective measures provided by such systems. Warfare at kernel level comes down to a question of who takes over first – the rootkit or the anti-rootkit solution.” (http://www.securelist.com/en/analysis?pubid=204792011)
  • 35. “Subtle and insubstantial, the expert leaves no trace; divinely mysterious, he is inaudible. Thus, he is the master of his enemy's fate.” - The Art of War, Sun Tzu