933 |
|
|
934 |
@ Fix ReadAddressGroupPolicy() bug. |
@ Fix ReadAddressGroupPolicy() bug. |
935 |
|
|
936 |
ReadAddressGroupPolicy() fails if both "path_group" and "address_group" are used |
ReadAddressGroupPolicy() fails if both "path_group" and "address_group" |
937 |
because I forgot to set "head->read_var1 = NULL". |
are used because I forgot to set "head->read_var1 = NULL". |
938 |
|
|
939 |
Fix 2007/07/10 |
Fix 2007/07/10 |
940 |
|
|
949 |
|
|
950 |
@ Remove mount-flags manipulation. |
@ Remove mount-flags manipulation. |
951 |
|
|
952 |
Until now, administrator is permitted to turn on/off specific mount options |
Until now, administrator is permitted to turn on/off specific mount |
953 |
regardless of mount options passed to kernel. |
options regardless of mount options passed to kernel. |
954 |
I removed this feature because "exact option matching" sounds better than |
I removed this feature because "exact option matching" sounds better than |
955 |
"automatic option enabler/disabler". |
"automatic option enabler/disabler". |
956 |
|
|
957 |
@ Remove /proc/ccs/info/mapping . |
@ Remove /proc/ccs/info/mapping . |
958 |
|
|
959 |
I removed /proc/ccs/info/mapping because nobody seems to use this feature. |
I removed /proc/ccs/info/mapping because nobody seems to use this |
960 |
|
feature. |
961 |
|
|
962 |
@ Call external policy loader automatically. |
@ Call external policy loader automatically. |
963 |
|
|
981 |
can handle interactive operations by opening /dev/console . |
can handle interactive operations by opening /dev/console . |
982 |
Now, there is no difference between init=/sbin/ccs-init and |
Now, there is no difference between init=/sbin/ccs-init and |
983 |
call_usermodehelper("/sbin/ccs-init"), and users no longer need to |
call_usermodehelper("/sbin/ccs-init"), and users no longer need to |
984 |
add init=/sbin/ccs-init parameter to load policy before /sbin/init starts. |
add init=/sbin/ccs-init parameter to load policy before /sbin/init |
985 |
|
starts. |
986 |
|
|
987 |
Fix 2007/08/14 |
Fix 2007/08/14 |
988 |
|
|
1144 |
rather than in_interrupt() because in_atomic() returns nonzero |
rather than in_interrupt() because in_atomic() returns nonzero |
1145 |
whenever scheduling is not allowed. |
whenever scheduling is not allowed. |
1146 |
|
|
|
Fix 2008/01/24 |
|
|
|
|
|
@ Support /proc/ccs/ access by non-root user. |
|
|
|
|
|
Until now, only root user can access /proc/ccs/ interface. |
|
|
But to permit /proc/ccs/ access by non-root user so that |
|
|
it won't require ssh login by root user when administrating |
|
|
from remote host, I eased restrictions on this interface. |
|
|
|
|
|
(current->uid == 0 && current->euid == 0) || |
|
|
(current->uid != 0 && current->uid == inode->i_uid) || |
|
|
(current->gid != 0 && current->gid == inode->i_gid) |
|
|
|
|
|
The inode's uid and gid are set using chown/chgrp commands. |
|
|
|
|
1147 |
Fix 2008/02/05 |
Fix 2008/02/05 |
1148 |
|
|
1149 |
@ Use find_task_by_vpid() instead of find_task_pid(). |
@ Use find_task_by_vpid() instead of find_task_pid(). |
1189 |
|
|
1190 |
in the policy. |
in the policy. |
1191 |
The state changes when the request was granted by the MAC's policy, |
The state changes when the request was granted by the MAC's policy, |
1192 |
so please be careful with situations where the state has changed successfully |
so please be careful with situations where the state has changed |
1193 |
but the request was not processed because of other reasons (e.g. out of memory). |
successfully but the request was not processed because of other reasons |
1194 |
|
(e.g. out of memory). |
1195 |
|
|
1196 |
|
Fix 2008/02/26 |
1197 |
|
|
1198 |
|
@ Support /proc/ccs/ access by non-root user. |
1199 |
|
|
1200 |
|
Until now, only root user can access /proc/ccs/ interface. |
1201 |
|
But to permit /proc/ccs/ access by non-root user so that it won't require |
1202 |
|
ssh login by root user when administrating from remote host, |
1203 |
|
I made "(current->uid == 0 && current->euid == 0)" requirement optional. |
1204 |
|
If this requirement is disabled, only "conventional DAC permission |
1205 |
|
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. |