Summary: |
|
||||||||||||||||||||||||
When using gLExec in a typical configuration it is possible for malicious jobs to continue consuming resources and in certain situation to attack subsequent jobs. |
|||||||||||||||||||||||||
| |||||||||||||||||||||||||
Effort Required: |
low |
||||||||||||||||||||||||
All that is required is being able to get the batch system to start a malicious job using gLExec. |
|||||||||||||||||||||||||
Impact/Consequences: |
medium |
||||||||||||||||||||||||
An attacker can continue consuming resources after the batch system thinks the original job has exited and in certain situations attack subsequent jobs. |
|||||||||||||||||||||||||
Full Details: |
|
||||||||||||||||||||||||
GLExec is an identity switching program which allows a job to execute under a
different identity. This identity is selected using the user provided X509
credential, and a mapping service such as a grid-map file or GUMS. GLExec will
switch users when starting the job and has a mode called linger where it waits
until the job has terminated. Under the linger mode, gLExec starts a job,
waits for the job to finish, writes a log record, and then exits. Without the
linger mode, gLExec This problem is that this linger mode merely waits for the initial child
process using Child job processes still running after the job has finished can causes several problems. First, resources can continue to be used indefinitely on the system. Second, depending upon the policy, subsequent jobs may be attacked if user IDs are reused. In this situation, a later job submitted to gLExec can end up with the same ID as the first malicious process. Since the two processes are owned by the same user, the malicious process can attack this new job by sending it signals, accessing its files, or controlling the process using a debugging interface. An simple example of where the malicious code could be used: |
|||||||||||||||||||||||||
Cause: |
|
||||||||||||||||||||||||
GLExec is not designed to perform a full cleanup of a job it executes. |
|||||||||||||||||||||||||
Proposed Fix: |
|
||||||||||||||||||||||||
The best solution would be for gLExec to perform a full cleanup. To do this, gLExec would need to track and kill all processes created by the job. The second best option would be an official LCMAPS plug-in for gLExec which performs this functionality. An example of such a plug-in can be obtained from VDT and is called gLExec-osg. In general this idea would work, but there are problems with the current osg version (see OSG-GLEXEC_2011-0001 ). If gLExec itself is not changed to support job tracking and an official plug-in is not implemented, the gLExec documentation needs to specify and warn users of this limitation and that users need to provide tracking and cleanup functionality. |
|||||||||||||||||||||||||
Acknowledgment: |
|
||||||||||||||||||||||||
This research funded in part by Department of Homeland Security grant FA8750-10-2-0030 (funded through AFRL) and NATO grant ICS.MD.CLG 984138. |