iOS安全:ptrace反调试与系统调用深度解析

5 下载量 45 浏览量 更新于2024-09-04 收藏 243KB PDF 举报
"iOS安全防护系列的文章,主要探讨了ptrace反调试技术和汇编调用系统方法,适用于iOS应用的安全开发和逆向分析学习。文中通过实例详细解释了ptrace系统调用的工作原理,以及在iOS设备上lldb调试的机制,特别是debugserver的角色。同时,文章还提到了如何利用ptrace进行防护,防止调试器的附加。" 在iOS安全防护中,ptrace系统调用是一个关键的工具,用于实现进程间的监控和控制。它允许一个进程(调试器)跟踪和影响另一个进程(被调试进程)的行为,包括设置断点、读取和修改内存及寄存器状态。在iOS环境中,当开发者使用lldb进行远程调试时,实际上就是通过debugserver这个组件来利用ptrace功能。 lldb调试原理的核心是debugserver,它由Xcode首次运行目标应用程序时安装到设备上。在非越狱设备上,debugserver存在于Xcode的特定版本支持文件夹中;而在越狱设备上,可以直接在系统的bin目录下找到它。debugserver接收来自调试器(如lldb)的指令,并将这些指令应用于目标应用,实现远程调试。 当应用想要防止被调试时,可以利用ptrace进行防护。通过检查ptrace调用的结果,应用可以检测是否有其他进程尝试对其进行调试。如果发现有调试活动,应用可以选择退出、挂起或采取其他防御措施,以此来避免敏感信息被泄露或恶意行为的发生。 汇编语言在iOS安全防护中也扮演着重要角色,尤其是在低级别调试和系统调用跟踪中。汇编语言允许开发者直接操作硬件级别的资源,如CPU寄存器,这对于理解系统调用的执行流程至关重要。通过阅读和分析汇编代码,可以深入了解程序的运行细节,包括哪些系统调用被触发,以及它们如何影响程序的行为。 为了深入学习这些概念,文中推荐了《程序员的自我修养》这本书,这本书通常包含有关底层系统和调试技术的深入讨论,可以帮助读者更好地理解和应用这些知识。 iOS应用的安全防护涉及到多个层次的技术,包括ptrace反调试和汇编调用系统方法。理解和掌握这些技术对于iOS开发者来说是至关重要的,特别是在保护应用程序免受逆向工程和恶意攻击方面。
2018-12-06 上传
## Features ### Anti-debugging attacks - IsDebuggerPresent - CheckRemoteDebuggerPresent - Process Environement Block (BeingDebugged) - Process Environement Block (NtGlobalFlag) - ProcessHeap (Flags) - ProcessHeap (ForceFlags) - NtQueryInformationProcess (ProcessDebugPort) - NtQueryInformationProcess (ProcessDebugFlags) - NtQueryInformationProcess (ProcessDebugObject) - NtSetInformationThread (HideThreadFromDebugger) - NtQueryObject (ObjectTypeInformation) - NtQueryObject (ObjectAllTypesInformation) - CloseHanlde (NtClose) Invalide Handle - SetHandleInformation (Protected Handle) - UnhandledExceptionFilter - OutputDebugString (GetLastError()) - Hardware Breakpoints (SEH / GetThreadContext) - Software Breakpoints (INT3 / 0xCC) - Memory Breakpoints (PAGE_GUARD) - Interrupt 0x2d - Interrupt 1 - Parent Process (Explorer.exe) - SeDebugPrivilege (Csrss.exe) - NtYieldExecution / SwitchToThread - TLS callbacks ### Anti-Dumping - Erase PE header from memory - SizeOfImage ### Timing Attacks [Anti-Sandbox] - RDTSC (with CPUID to force a VM Exit) - RDTSC (Locky version with GetProcessHeap & CloseHandle) - Sleep -> SleepEx -> NtDelayExecution - Sleep (in a loop a small delay) - Sleep and check if time was accelerated (GetTickCount) - SetTimer (Standard Windows Timers) - timeSetEvent (Multimedia Timers) - WaitForSingleObject -> WaitForSingleObjectEx -> NtWaitForSingleObject - WaitForMultipleObjects -> WaitForMultipleObjectsEx -> NtWaitForMultipleObjects (todo) - IcmpSendEcho (CCleaner Malware) - CreateWaitableTimer (todo) - CreateTimerQueueTimer (todo) - Big crypto loops (todo) ### Human Interaction / Generic [Anti-Sandbox] - Mouse movement - Total Physical memory (GlobalMemoryStatusEx) - Disk size using DeviceIoControl (IOCTL_DISK_GET_LENGTH_INFO) - Disk size using GetDiskFreeSpaceEx (TotalNumberOfBytes) - Mouse (Single click / Double click) (todo) - DialogBox (todo) - Scrolling (todo) - Execution after reboot (todo) - Count of processors (Win32/Tinba - Win32/Dyre) - Sandbox k