credentials link

This commit is contained in:
Andriy Petrov 2024-04-25 22:05:17 +02:00
parent 29faf5bb06
commit fe03298689
2 changed files with 10 additions and 10 deletions

View File

@ -11,7 +11,7 @@ sudo insmod sumo.ko # install
# How it works # How it works
In it's `init()` function, *sumo* kernel module creates `/proc/sumo` file and waits for PID to be written. Afterwards, it fetches instance of a `task_struct` [kernel structure](https://medium.com/@boutnaru/linux-kernel-task-struct-829f51d97275) associated with the given PID and modifies its values accordingly. In it's `init()` function, *sumo* kernel module creates `/proc/sumo` file and waits for PID to be written. Afterwards, it fetches instance of a `task_struct` [kernel structure](https://medium.com/@boutnaru/linux-kernel-task-struct-829f51d97275) associated with the given PID and modifies its values accordingly. The main point of interest is the data stored in [credentials structure](https://docs.kernel.org/security/credentials.html).
```text ```text
sumo __ SUdo sumo __ SUdo

18
sumo.c
View File

@ -4,10 +4,10 @@
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/uaccess.h> // #include <linux/uaccess.h>
#include <linux/seq_file.h> // #include <linux/seq_file.h>
#include <linux/sched.h> // #include <linux/sched.h>
#include <linux/capability.h> // #include <linux/capability.h>
#include <linux/cred.h> #include <linux/cred.h>
@ -40,17 +40,17 @@ MODULE_DESCRIPTION("Grant root access right to the process by PID");
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
void set_task_uids_gids_to_zero(struct task_struct *task) void set_task_uids_gids_to_zero(struct task_struct *task)
{ {
struct cred *_cred; struct cred *_cred;
//struct real_cred *_real_cred; //struct real_cred *_real_cred;
// Safely access cred and real_cred using rcu_dereference // Safely access cred and real_cred using rcu_dereference
_cred = (struct cred *)rcu_dereference(task->cred); _cred = (struct cred *)rcu_dereference(task->cred);
//_real_cred = (struct cred *)rcu_dereference(task->real_cred); //_real_cred = (struct cred *)rcu_dereference(task->real_cred);
if (_cred == NULL) { if (_cred == NULL) {
pr_err(MTAG "Task creds are null %d\n", task->pid); pr_err(MTAG "Task creds are null %d\n", task->pid);
return; return;
} }
// Update UIDs to zero // Update UIDs to zero
_cred->uid.val = 0; _cred->uid.val = 0;