Compare commits

4 Commits

Author SHA1 Message Date
a08de8a553 [go mod] rename module 2023-11-11 15:28:35 +01:00
0b2bba5d77 [gitignore] update && rm binary file 2023-11-11 03:22:10 +01:00
398e16e724 [readme] WIP 2023-11-11 03:20:03 +01:00
e93346f646 [nixpkgs] update 2023-11-11 03:19:41 +01:00
21 changed files with 84 additions and 57 deletions

3
.gitignore vendored
View File

@@ -2,6 +2,7 @@
.envrc .envrc
result result
example.json example.json
./gokill gokill
output.md output.md
thoughts.md thoughts.md
deb-single*

View File

@@ -1,40 +1,37 @@
# gokill # gokill
gokill is aimed at activists, journalists and others that need to protect their data against access under all circumstances.
gokill falls under the category of anti-forensic tools, helping you to protect yourself against repression. gokill is designed for activists, journalists, and individuals who require robust protection for their data, ensuring it remains inaccessible under any circumstances. It belongs to the category of anti-forensic tools, providing a means to safeguard against potential repression. gokill is a [software dead man's switch](https://en.wikipedia.org/wiki/Dead_man%27s_switch#Software) that empowers users to configure various events. If these events occur, they trigger predefined actions. It is specifically crafted for worst-case scenarios, such as when intruders gain physical access to a device. In these intense situations, gokill automatically performs tasks to enhance your security:
It is built for worst case scenarios when intruders physical gaining access to a device.
In such heated situations gokill helps you automatically executing tasks like:
- locking the screen - locking the screen
- sending a chat message - sending chat messages
- deleting data - deleting data
- encrypting partitions - encrypting partitions
- destroying encrypted partitions - destroying encrypted partitions
- and many more - ect
the tasks gokill executes could be done by hand using shellscripts, cronjobs, daemons ect. ## usage
but that means everyone needs to figure it out for themselves, and eventually make mistakes.
the idea of gokill is to provide a wide variarity of possibilities out of the box while making sure they are well tested.
gokill aims to be highly configurable and easily extendable. ``` bash
# Clone the gokill repository
git clone https://github.com/k4lipso/gokill
cd gokill
'gokill' is a tool that completes some actions when a certain event occurs. # Build gokill
actions can vary from shuting down the machine to sending mails over erasing data. go build github.com/k4lipso/gokill
actions can be triggert by certain conditions like specific outcomes of unix
comands or not having internet connection.
actions and triggers should be easy to extend and handled like plugins. they # Create a config.json and run gokill
also should be self documenting. ./gokill -c config.json
every action and trigger should be testable at anytime as a 'dry-run'. ```
actions can have a 'stage' defined. the lowest stage is started first,
and only when all actions on that stage are finished next stage is triggered
gokill should run as daemon. config should be read from /etc/somename/config.json
## Config Example ## Config Example
gokill is configured using a json file. it consists of a list of triggers, where each of the triggers as a list of
actions that will be executed once triggered.
``` json ``` json
[ //list of triggers [ //list of triggers
{ {
"type": "UsbDisconnect", "type": "UsbDisconnect", //triggers when the given device is disconnected
"name": "First Trigger", "name": "First Trigger",
"options": { "options": {
"deviceId": "ata-Samsung_SSD_860_EVO_1TB_S4AALKWJDI102", "deviceId": "ata-Samsung_SSD_860_EVO_1TB_S4AALKWJDI102",
@@ -72,7 +69,7 @@ gokill should run as daemon. config should be read from /etc/somename/config.jso
{ {
"name": "unixCommand", "name": "unixCommand",
"options": { "options": {
"command": "env DISPLAY=:0 sudo su -c i3lock someUser" "command": "env DISPLAY=:0 sudo su -c i3lock someUser" //example of locking someUser's screen as root
} }
} }
] ]
@@ -112,25 +109,54 @@ Here is a small example config:
This will automatically configure and enable a systemd running gokill as root user in the background This will automatically configure and enable a systemd running gokill as root user in the background
## actions ## --
the tasks gokill executes could be done by hand using shellscripts, cronjobs, daemons ect.
but that means everyone needs to figure it out for themselves, and eventually make mistakes.
the idea of gokill is to provide a wide variarity of possibilities out of the box while making sure they are well tested
and relatively easy to setup.
---
actions and triggers should be easy to extend and handled like plugins. they
also should be self documenting.
every action and trigger should be testable at anytime as a 'dry-run'.
actions can have a 'stage' defined. the lowest stage is started first,
and only when all actions on that stage are finished next stage is triggered
gokill should run as daemon. config should be read from /etc/somename/config.json
## todos
- export snap
- export ppa
### actions
- [x] shutdown - [x] shutdown
- [ ] wipe ram - [ ] wipe ram
- [ ] send mail - [ ] ~~send mail~~
- send chat message
- [x] telegram
- [x] matrix
- [ ] delete data - [ ] delete data
- [ ] shred area - [ ] shred area
- [x] random command - [x] run command
- [ ] wordpress post - [ ] wordpress post
- [ ] ipfs command - [ ] ipfs command
- [ ] [buskill 'triggers'](https://github.com/BusKill/awesome-buskill-triggers) - [buskill 'triggers'](https://github.com/BusKill/awesome-buskill-triggers)
- [x] [lock-screen](https://github.com/BusKill/buskill-linux/tree/master/triggers) - [x] [lock-screen](https://github.com/BusKill/buskill-linux/tree/master/triggers)
- [x] shutdown - [x] shutdown
- [ ] luks header shredder - [ ] luks header shredder
- [ ] veracrypt self-destruct - [ ] veracrypt self-destruct
## Triggers ### triggers
- [ ] no internet - [ ] no internet
- [x] [pull usb stick](https://github.com/deepakjois/gousbdrivedetector/blob/master/usbdrivedetector_linux.go) - [x] [pull usb stick](https://github.com/deepakjois/gousbdrivedetector/blob/master/usbdrivedetector_linux.go)
- [x] ethernet unplugged - [x] ethernet unplugged
- receive specific chat message
- [x] telegram
- [ ] matrix
- [ ] power adapter disconnected - [ ] power adapter disconnected
- [ ] unix command - [ ] unix command
- anyOf - anyOf

View File

@@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"sort" "sort"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type ActionResultChan chan error type ActionResultChan chan error

View File

@@ -3,7 +3,7 @@ package actions
import ( import (
"encoding/json" "encoding/json"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type Printer struct { type Printer struct {

View File

@@ -15,7 +15,7 @@ import (
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/crypto/cryptohelper" "maunium.net/go/mautrix/crypto/cryptohelper"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type SendMatrix struct { type SendMatrix struct {

View File

@@ -7,7 +7,7 @@ import (
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type SendTelegram struct { type SendTelegram struct {

View File

@@ -6,7 +6,7 @@ import (
"os/exec" "os/exec"
"os" "os"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type ShellScript struct { type ShellScript struct {

View File

@@ -4,7 +4,7 @@ import (
"os/exec" "os/exec"
"encoding/json" "encoding/json"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type Shutdown struct { type Shutdown struct {

View File

@@ -4,7 +4,7 @@ import (
"encoding/json" "encoding/json"
"time" "time"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type TimeOut struct { type TimeOut struct {

View File

@@ -6,7 +6,7 @@ import (
"os/exec" "os/exec"
"strings" "strings"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type Command struct { type Command struct {

View File

@@ -6,9 +6,9 @@ import (
"os" "os"
"flag" "flag"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
"unknown.com/gokill/triggers" "github.com/k4lipso/gokill/triggers"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
func getMarkdown(documenter internal.Documenter) string { func getMarkdown(documenter internal.Documenter) string {

View File

@@ -6,9 +6,9 @@ import (
"fmt" "fmt"
"os" "os"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
"unknown.com/gokill/triggers" "github.com/k4lipso/gokill/triggers"
) )
func GetDocumentation() string { func GetDocumentation() string {

6
flake.lock generated
View File

@@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1698553279, "lastModified": 1699343069,
"narHash": "sha256-T/9P8yBSLcqo/v+FTOBK+0rjzjPMctVymZydbvR/Fak=", "narHash": "sha256-s7BBhyLA6MI6FuJgs4F/SgpntHBzz40/qV0xLPW6A1Q=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "90e85bc7c1a6fc0760a94ace129d3a1c61c3d035", "rev": "ec750fd01963ab6b20ee1f0cb488754e8036d89d",
"type": "github" "type": "github"
}, },
"original": { "original": {

2
go.mod
View File

@@ -1,4 +1,4 @@
module unknown.com/gokill module github.com/k4lipso/gokill
go 1.21.3 go 1.21.3

BIN
gokill

Binary file not shown.

View File

@@ -6,8 +6,8 @@ import (
"os" "os"
"time" "time"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type EthernetDisconnect struct { type EthernetDisconnect struct {

View File

@@ -3,7 +3,7 @@ package triggers
import ( import (
"testing" "testing"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
func TestEthernetDisconnetConfig(t *testing.T) { func TestEthernetDisconnetConfig(t *testing.T) {

View File

@@ -6,8 +6,8 @@ import (
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
) )
type ReceiveTelegram struct { type ReceiveTelegram struct {

View File

@@ -3,8 +3,8 @@ import (
"encoding/json" "encoding/json"
"time" "time"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type TimeOut struct { type TimeOut struct {

View File

@@ -3,7 +3,7 @@ package triggers
import ( import (
"fmt" "fmt"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type Trigger interface { type Trigger interface {

View File

@@ -6,8 +6,8 @@ import (
"os" "os"
"time" "time"
"unknown.com/gokill/actions" "github.com/k4lipso/gokill/actions"
"unknown.com/gokill/internal" "github.com/k4lipso/gokill/internal"
) )
type UsbDisconnect struct { type UsbDisconnect struct {