オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

Diff of /trunk/1.8.x/ccs-patch/README.ccs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 924 by kumaneko, Thu Jan 24 03:18:27 2008 UTC revision 1093 by kumaneko, Tue Apr 8 05:48:22 2008 UTC
# Line 1  Line 1 
1  Notes for TOMOYO Linux project  Notes for TOMOYO Linux project
2    
3  This is a handy Mandatory Access Control patch for Linux kernels.  This is a handy Mandatory Access Control patch for Linux kernels.
4  This patch is released under the GPL.  This patch is released under the GPLv2.
5    
6  Project URL: http://tomoyo.sourceforge.jp/  Project URL: http://tomoyo.sourceforge.jp/
7    
# Line 933  Fix 2007/07/04 Line 933  Fix 2007/07/04
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    
# Line 949  Fix 2007/08/06 Line 949  Fix 2007/08/06
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    
# Line 980  Fix 2007/08/13 Line 981  Fix 2007/08/13
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    
# Line 1142  Fix 2008/01/15 Line 1144  Fix 2008/01/15
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    
1147  Fix 2008/01/24  Fix 2008/02/05
1148    
1149        @ Use find_task_by_vpid() instead of find_task_pid().
1150    
1151          Kernel 2.6.24 introduced PID namespace.
1152          To search PID given from userland, the kernel needs to use
1153          find_task_by_vpid() instead of find_task_pid().
1154    
1155    Fix 2008/02/14
1156    
1157        @ Add execve() parameter checking.
1158    
1159          Until now, it was impossible to check argv[] and envp[] parameters
1160          passed to execve().
1161          I expanded conditional permission syntax so that
1162          { argc, envc, argv[] , envp[] } parameters can be checked if needed.
1163          This will allow administrator permit execution of /bin/sh only when
1164          /bin/sh is invoked in the form of "/bin/sh -c" and environment variable
1165          HOME is set by specifying
1166    
1167            allow_execute /bin/sh if exec.argv[1]="-c" exec.envp["HOME"]!=NULL
1168    
1169          in the policy.
1170          This extension will make exploit codes difficult to start /bin/sh because
1171          they unlikely set up environment variables and unlikely specify "-c"
1172          option when invoking /bin/sh , whereas proper functions likely set up
1173          environment variables and likely specify "-c" option.
1174    
1175    Fix 2008/02/18
1176    
1177        @ Add process state checking.
1178    
1179          Until now, it was impossible to change ACL without executing program.
1180          I added three variables for performing stateful checking within a domain.
1181          You can set current process's state like:
1182    
1183            allow_network TCP accept @TRUSTED_HOSTS 1024-65535 ; set task.state[0]=1
1184            allow_network TCP accept @UNTRUSTED_HOSTS 1024-65535 ; set task.state[0]=0
1185    
1186          and you can use the state like
1187    
1188            allow_read /path/to/important/file if task.state[0]=1
1189    
1190          in the policy.
1191          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
1193          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.      @ Support /proc/ccs/ access by non-root user.
1199    
1200        Until now, only root user can access /proc/ccs/ interface.        Until now, only root user can access /proc/ccs/ interface.
1201        But to permit /proc/ccs/ access by non-root user so that        But to permit /proc/ccs/ access by non-root user so that it won't require
1202        it won't require ssh login by root user when administrating        ssh login by root user when administrating from remote host,
1203        from remote host, I eased restrictions on this interface.        I made "(current->uid == 0 && current->euid == 0)" requirement optional.
1204          If this requirement is disabled, only "conventional DAC permission
1205             (current->uid == 0 && current->euid == 0) ||        checks" and "/proc/ccs/manager checks" are used.
1206             (current->uid != 0 && current->uid == inode->i_uid) ||  
1207             (current->gid != 0 && current->gid == inode->i_gid)  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. honey pot).
1251          This makes it possible to act your Linux box as an on-demand honey pot
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.
1259    
1260    Fix 2008/03/03
1261    
1262        @ Add "force_alt_exec" keyword.
1263    
1264          To be able to fully utilize "alt_exec" feature,
1265          I added "force_alt_exec" keyword so that
1266          all execute requests are replaced by the execute request of a program
1267          specified by alt_exec feature.
1268    
1269          If this keyword is specified for a domain, the domain no longer
1270          executes any programs regardless of the mode of file access control
1271          (i.e. the domain won't execute even if MAC_FOR_FILE=0 ).
1272          Instead, the domain executes the program specified by alt_exec feature
1273          and the program specified by alt_exec feature validates the execute
1274          request and executes it if it is appropriate to execute.
1275    
1276          If you can tolerate that there is no chance to return an error code
1277          to the caller to tell the execute request was rejected,
1278          this is more flexible approach than in-kernel execve() parameter
1279          checking because we can do argv[] and envp[] checking easily.
1280    
1281    Fix 2008/03/04
1282    
1283        @ Use string for access control mode.
1284    
1285          An integer expression for access control mode sometimes confuses
1286          administrators because profile number is also an integer expression.
1287          To avoid confusion between profile number and access control mode,
1288          I introduced a string expression for access control mode.
1289    
1290            Modes which take an integer between 0 and 3.
1291    
1292              0 -> disabled
1293              1 -> learning
1294              2 -> permissive
1295              3 -> enforcing
1296    
1297            Modes which take 0 or 1.
1298    
1299              0 -> disabled
1300              1 -> enabled
1301    
1302    Fix 2008/03/10
1303    
1304        @ Rename "force_alt_exec" keyword to "execute_handler".
1305    
1306          To be able to use different programs for validating execve() parameters,
1307          I moved the location to specify the program's pathname from profile
1308          to domain policy.
1309    
1310          The "execute_handler" keyword takes one pathname which is
1311          invoked whenever execve() request is issued. Thus, any "allow_execute"
1312          keywords in a domain with "execute_handler" are ignored.
1313          This keyword is designed for validating expected/desirable execve()
1314          requests in userspace, although there is no way to tell the caller
1315          that the execve() request was rejected.
1316    
1317        @ Rename "alt_exec" keyword to "denied_execute_handler".
1318    
1319          The "denied_execute_handler" keyword takes one pathname which is
1320          invoked only when execve() request was rejected. In other words,
1321          this program is invoked only when the following conditions are met.
1322    
1323            (1) None of "allow_execute" keywords in the domain matched.
1324            (2) The execve() request was rejected in enforcing mode.
1325            (3) "execute_handler" keyword is not used by the domain.
1326    
1327          This keyword is designed for handling unexpected/undesirable execve()
1328          requests, to redirect the process issuing such requests to somewhere.
1329    
1330    Fix 2008/03/18
1331    
1332        @ Fix wrong/redundant locks in pre-vfs functions.
1333    
1334          lock_kernel()/unlock_kernel() in pre_vfs_rename() were redundant for
1335          2.6 kernels.
1336    
1337          Locking order in pre_vfs_link() and pre_vfs_unlink() for 2.4 kernels
1338          after 2.4.33 were different from before 2.4.32 .
1339    
1340    Fix 2008/03/28
1341    
1342        @ Disable execute handler loop.
1343    
1344          To be able to use "execute_handler" in a "keep_domain" domain,
1345          ignore "execute_handler" and "denied_execute_handler" keywords
1346          if the current process is executing programs specified by
1347          "execute_handler" or "denied_execute_handler" keyword.
1348    
1349          This exception is needed to avoid infinite execute handler loop.
1350          If a domain has both "keep_domain" and "execute_handler",
1351          any execute request by that domain is handled by an execute handler,
1352          and the execute handler attempts to process original execute request.
1353          But the original execute request is handled by the same execute handler
1354          unless the execute handler ignores "execute_handler".
1355    
1356        @ Update coding style.
1357    
1358          I rewrote the code to pass scripts/checkpatch.pl as much as possible.
1359          Function names were changed to use only lower letters.
1360    
1361    Version 1.6.0 2008/04/01   Feature enhancement release.
1362    
1363    Fix 2008/??/??
1364    
1365        @ Fix "Compilation failures" and "Initialization ordering bugs"
1366          with kernels before 2.4.30/2.6.11 .
1367    
1368          2.6 kernels before 2.6.9 didn't have include/linux/hardirq.h ,
1369          resulting compilation error at #include <linux/hardirq.h> .
1370          I added #elif condition.
1371    
1372          2.6 kernels before 2.6.11 calls do_execve() before initialization of
1373          ccs_alloc(), resulting NULL pointer dereference.
1374          I changed __initcall to fs_initcall.
1375    
1376        The inode's uid and gid are set using chown/chgrp commands.        Some distributions with 2.6.9 kernels backported kzalloc() from 2.6.14 ,
1377          resulting compilation error at kzalloc().
1378          I modified prototype of kzalloc().

Legend:
Removed from v.924  
changed lines
  Added in v.1093

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26