Trac is being migrated to new services! Issues can be found in our new
YouTrack instance and WIKI pages can be found on our
website.
- Timestamp:
-
Dec 31, 2015, 10:35:41 PM (8 years ago)
- Author:
-
mmcco
- Comment:
-
add section about initialization and subsequent lockdown
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v87
|
v88
|
|
173 | 173 | This method allows for more specialization and is therefore far more efficient. |
174 | 174 | |
| 175 | === Initialization === |
| 176 | |
| 177 | OpenBSD's new privilege revocation system call [http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/pledge.2 pledge(2)] is based largely on the concept that programs do most of their privileged operations during initialization, eventually dropping into a main loop that is "boring and full of buffer overflows". The `pledge(2)` model therefore allows the process all privileges until it makes the system call. This is fundamentally different from approaches such as App^^Armors, which have a static privilege list stored outside the program that is always enforced. |
| 178 | |
| 179 | The `pledge(2)` model makes more sense for network programs like Pidgin and is easier to implement. In these cases, we trust the ''binary'' to not be malicious, but we don't trust the remote network entities it interacts with, and we don't trust the binary to protect us from them. Many other access control frameworks results attempt to protect the system from potentially malicious binaries, which can add complicating rigidity. |
| 180 | |
| 181 | This sort of approach can be used in App^^Armor's through its ``aa_change_hat`` and ``aa_change_profile`` functions. However, this is less elegant and seems rarely used. |
| 182 | |
175 | 183 | === Code annotations === |
176 | 184 | |
177 | | Anecdotally, it'd be nice to start the convention of using a tag like `PRIVSEP` in code to help packagers find points of potential lockdown. Lacking these, locating `fork()` and `exec()`-family functions with cscope or something similar is a good approach. Running the program in a [http://www.sourceware.org/gdb/onlinedocs/gdb/Forks.html debugger] and breaking on new process creation is also educational, as is understanding its initialization and `main()` logic well. |
| 185 | Anecdotally, it'd be nice to start the convention of using a tag like `PRIVSEP` in code to help packagers find points of potential lockdown. Lacking these, locating `fork()` and `exec()`-family functions with cscope or something similar is a good approach. Running the program in a [http://www.sourceware.org/gdb/onlinedocs/gdb/Forks.html debugger] and breaking on new process creation is also educational. |
178 | 186 | |
179 | 187 | === Breakages === |
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!