diff --git a/examples/kernel-module/Makefile b/examples/kernel-module/Makefile index c41fcd3..9d03085 100644 --- a/examples/kernel-module/Makefile +++ b/examples/kernel-module/Makefile @@ -1,5 +1,6 @@ # out-of-tree called make with two arguments -- kernel headers path and name # of target binary that MUST be produced by makefile +# - $(TARGET).ko_test: name of test binary that MUST be produced by makefile # e.g.: # make KERNEL=/lib/modules/4.8.0-58-generic/build TARGET=hello-world.ko KERNEL := /lib/modules/$(shell uname -r)/build @@ -10,6 +11,7 @@ $(TARGET)-objs = module.o all: make -C $(KERNEL) M=$(PWD) modules + cp test.sh $(TARGET).ko_test clean: make -C $(KERNEL) M=$(PWD) clean diff --git a/examples/kernel-module/module.c b/examples/kernel-module/module.c index 3800135..028e345 100644 --- a/examples/kernel-module/module.c +++ b/examples/kernel-module/module.c @@ -3,6 +3,7 @@ int init_module(void) { + printk("COOKIE!\n"); return 0; } diff --git a/examples/kernel-module/test.sh b/examples/kernel-module/test.sh new file mode 100644 index 0000000..6a939e6 --- /dev/null +++ b/examples/kernel-module/test.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# check for message in kernel log +dmesg | grep COOKIE diff --git a/main.go b/main.go index 668d2c2..f159cf8 100644 --- a/main.go +++ b/main.go @@ -178,18 +178,13 @@ func cleanDmesg(q *qemu.QemuSystem) (err error) { return } -func testKernelModule(q *qemu.QemuSystem, ka artifact) (output string, err error) { - // TODO - err = errors.New("Not implemented") +func testKernelModule(q *qemu.QemuSystem, ka artifact, test string) (output string, err error) { + output, err = q.Command("root", test) + // TODO generic checks for WARNING's and so on return } func testKernelExploit(q *qemu.QemuSystem, ka artifact, test, exploit string) (output string, err error) { - output, err = q.Command("user", "chmod +x "+test) - if err != nil { - return - } - output, err = q.Command("user", "chmod +x "+exploit) if err != nil { return @@ -280,19 +275,32 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka artifact, ki kernelInfo) { return } + testPath := outFile + "_test" + + remoteTest := fmt.Sprintf("/tmp/test_%d", rand.Int()) + err = q.CopyFile("user", testPath, remoteTest) + if err != nil { + return + } + + _, err = q.Command("root", "chmod +x "+remoteTest) + if err != nil { + return + } + if ka.Type == KernelModule { // TODO Write insmod log to file or database output, err := q.CopyAndInsmod(outFile) if err != nil { - log.Println(output) + log.Println(output, err) return } run_ok = true // TODO Write test results to file or database - output, err = testKernelModule(q, ka) + output, err = testKernelModule(q, ka, remoteTest) if err != nil { - log.Println(output) + log.Println(output, err) return } test_ok = true @@ -303,14 +311,6 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka artifact, ki kernelInfo) { return } - testPath := outFile + "_test" - - remoteTest := fmt.Sprintf("/tmp/test_%d", rand.Int()) - err = q.CopyFile("user", testPath, remoteTest) - if err != nil { - return - } - // TODO Write test results to file or database output, err = testKernelExploit(q, ka, remoteTest, remoteExploit) if err != nil {