1203 |
I made "(current->uid == 0 && current->euid == 0)" requirement optional. |
I made "(current->uid == 0 && current->euid == 0)" requirement optional. |
1204 |
If this requirement is disabled, only "conventional DAC permission |
If this requirement is disabled, only "conventional DAC permission |
1205 |
checks" and "/proc/ccs/manager checks" are used. |
checks" and "/proc/ccs/manager checks" are used. |
1206 |
|
|
1207 |
|
Fix 2008/02/29 |
1208 |
|
|
1209 |
|
@ Add sleep_on_violation feature. |
1210 |
|
|
1211 |
|
Some exploit codes (e.g. trans2open for Samba) continue running |
1212 |
|
until it achieves the purpose of the exploit code (e.g. invoke /bin/sh). |
1213 |
|
|
1214 |
|
If such code is injected due to buffer overflow but the kernel |
1215 |
|
rejects the request, it triggers infinite "Permission denied" loop. |
1216 |
|
As a result, the CPU usage becomes 100% and gives bad effects to |
1217 |
|
the rest of processes. |
1218 |
|
This is a side effect of rejecting the request from the exploit code |
1219 |
|
which wouldn't happen if the request from the exploit code was granted. |
1220 |
|
|
1221 |
|
To avoid such CPU consumption, I added a penalty that forcibly |
1222 |
|
sleeps for specified period when a request is rejected. |
1223 |
|
|
1224 |
|
This penalty doesn't work if the exploit code does nothing but |
1225 |
|
continue running, but I think most exploit code's purpose is |
1226 |
|
to start some program rather than to slow down the target system. |
1227 |
|
|
1228 |
|
@ Add alt_exec feature. |
1229 |
|
|
1230 |
|
Since TOMOYO Linux's approach is "know all essential requests in advance |
1231 |
|
and create policy that permits only them", you can regard anomalous |
1232 |
|
requests as attacks (if you want to do so). |
1233 |
|
|
1234 |
|
Common MAC implementations merely reject requests that violate policy. |
1235 |
|
But I added a special handler for execve() to TOMOYO Linux. |
1236 |
|
|
1237 |
|
This handler is triggered when a process requested to execute a program |
1238 |
|
but the request was rejected by the policy. |
1239 |
|
This handler executes a program specified by the administrator |
1240 |
|
instead of a program requested by the process. |
1241 |
|
|
1242 |
|
Most attackers attempt to execute /bin/sh to start something malicious. |
1243 |
|
Attackers execute an exploit code using buffer overflow vulnerability |
1244 |
|
to steal control of a process. But this handler can get back control |
1245 |
|
if an exploit code requests execve() that is not permitted by policy. |
1246 |
|
|
1247 |
|
By default, this handler does nothing (i.e. merely reject execve() |
1248 |
|
request). You can specify any program to start what you want to do. |
1249 |
|
|
1250 |
|
You can redirect attackers to somewhere else (e.g. honeypot). |
1251 |
|
This makes it possible to act your Linux box as an on-demand honeypot |
1252 |
|
while keeping regular services for your usage. |
1253 |
|
|
1254 |
|
You can collect information of the attacker (e.g. IP address) and |
1255 |
|
update firewall configuration. |
1256 |
|
|
1257 |
|
You can silently terminate a process who requested execve() |
1258 |
|
that is not permitted by policy. |