2012-04-15 7 views
1

Warum muss ich als root ausführen (nicht r00t_)?ptrace PTRACE_ATTACH failure - Linux-Berechtigungen des Benutzers im Besitz Prozess

// main() 
scan.scanProcessOffset(10838, 0x7f8c14000000); // proper pid and offset 

void MemoryMapper::scanProcessOffset(unsigned int procId, unsigned long long offset) 
{ 
    long attach = ptrace(PTRACE_ATTACH, procId, NULL, NULL); 
    cout << attach << endl << errno << endl; 

    long memory = ptrace(PTRACE_PEEKDATA, procId, offset); 
    if (memory == -1 && errno == 3) 
    { 
     cout << errno << endl; 
     errno = 0; 
    } 

    cout << memory; 
} 

Wie können Sie den Prozess sehe ich in bin Einhaken von r00t_ gehört

[email protected]:/proc/10838$ ls -l 
lrwxrwxrwx 1 r00t r00t_ 0 2012-04-15 08:21 exe -> /usr/bin/gedit 
-rw------- 1 r00t r00t_ 0 2012-04-15 09:04 mem 

Ausgang nicht als root ausgeführt wird:

[email protected]:~/memedit$ ./a.out 
-1 
1 
3 
-1 

Ausgabe als root:

[email protected]:~/memedit$ sudo ./a.out 
0 
0 
140239607693344 

Warum kann ich mich nicht anhängen, wenn ich der Besitzer des Prozesses bin, an den ich mich anhänge?

+0

Verwenden Sie Ubuntu? –

+0

Ja, ich benutze Ubuntu 11.10 –

Antwort

4

Während einige Anwendungen prctl() verwenden speziell PTRACE_ATTACH (zB ssh-agent), eine allgemeine Lösung in Yama ist implementiert, um nicht zuzulassen nur ptrace von einem Elternteil mit einem Kind-Prozess direkt zu ermöglichen (dh direkte gdb und strace noch arbeiten), oder als root-Benutzer (dh gdb BIN PID und strace -p PID arbeiten immer noch als root). Im Falle einer lokalen App-Kompromittierung ist der Angreifer nicht in der Lage, sich an andere Prozesse anzuhängen und deren Speicher- und Ausführungsstatus zu überprüfen. Dieses Verhalten wird über den /proc/sys/kernel/yama/ptrace_scope sysctl-Wert gesteuert. Der Standardwert ist "1", um nicht untergeordnete ptrace-Aufrufe zu blockieren. Ein Wert von "0" stellt das permissivere Verhalten wieder her, was für Entwicklungssysteme und/oder Server mit nur administrativen Konten geeigneter sein kann. Die Verwendung von sudo kann auch vorübergehend ptrace Berechtigungen über die CAP_SYS_PTRACE-Funktion gewähren, obwohl diese Methode die ptrace eines beliebigen Prozesses ermöglicht.

+0

So würde es scheinen, würde es nur Root-Level privelages im Allgemeinen brauchen, denn ich möchte dies in der Lage sein, in vielen verschiedenen Arten von Anwendungen zu haken. Danke für die Einsicht in die Gründe dafür. –

Verwandte Themen