1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00

Merge branch 'interlock-security_linux' into 20180531-linux-security-merge

This commit is contained in:
Chris Cummer 2018-05-31 16:50:26 -07:00
commit a88a909e10
6 changed files with 160 additions and 24 deletions

View File

@ -6,7 +6,7 @@ dependencies:
go get -v ./... go get -v ./...
install: install:
which wtf | xargs rm which wtf | xargs rm || true
go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6)_$(BRANCH) -X main.date=$(shell date +%FT%T%z)" go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6)_$(BRANCH) -X main.date=$(shell date +%FT%T%z)"
which wtf which wtf

View File

@ -2,13 +2,46 @@ package security
import ( import (
"os/exec" "os/exec"
"runtime"
"strings"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
const dnsCmd = "networksetup" func dnsLinux() []string {
// This may be very Ubuntu specific
func DnsServers() string { cmd := exec.Command("nmcli", "device", "show")
cmd := exec.Command(dnsCmd, "-getdnsservers", "Wi-Fi") out := wtf.ExecuteCommand(cmd)
return wtf.ExecuteCommand(cmd) lines := strings.Split(out, "\n")
dns := []string{}
for _, l := range lines {
if strings.HasPrefix(l, "IP4.DNS") {
parts := strings.Split(l, ":")
dns = append(dns, strings.TrimSpace(parts[1]))
}
}
return dns
}
func dnsMacOS() []string {
cmd := exec.Command("networksetup", "-getdnsservers", "Wi-Fi")
out := wtf.ExecuteCommand(cmd)
records := strings.Split(out, "\n")
if len(records) > 0 {
return records
} else {
return []string{}
}
}
func DnsServers() []string {
switch runtime.GOOS {
case "linux":
return dnsLinux()
case "darwin":
return dnsMacOS()
default:
return []string{runtime.GOOS}
}
} }

View File

@ -2,6 +2,7 @@ package security
import ( import (
"os/exec" "os/exec"
"runtime"
"strings" "strings"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
@ -11,20 +12,50 @@ const osxFirewallCmd = "/usr/libexec/ApplicationFirewall/socketfilterfw"
/* -------------------- Exported Functions -------------------- */ /* -------------------- Exported Functions -------------------- */
func FirewallState() string { func firewallStateLinux() string {
return "[red]NA[white]"
}
func firewallStateMacOS() string {
cmd := exec.Command(osxFirewallCmd, "--getglobalstate") cmd := exec.Command(osxFirewallCmd, "--getglobalstate")
str := wtf.ExecuteCommand(cmd) str := wtf.ExecuteCommand(cmd)
return status(str) return status(str)
} }
func FirewallStealthState() string { func FirewallState() string {
switch runtime.GOOS {
case "linux":
return firewallStateLinux()
case "darwin":
return firewallStateMacOS()
default:
return ""
}
}
func firewallStealthStateLinux() string {
return "[red]NA[white]"
}
func firewallStealthStateMacOS() string {
cmd := exec.Command(osxFirewallCmd, "--getstealthmode") cmd := exec.Command(osxFirewallCmd, "--getstealthmode")
str := wtf.ExecuteCommand(cmd) str := wtf.ExecuteCommand(cmd)
return status(str) return status(str)
} }
func FirewallStealthState() string {
switch runtime.GOOS {
case "linux":
return firewallStealthStateLinux()
case "darwin":
return firewallStealthStateMacOS()
default:
return ""
}
}
/* -------------------- Unexported Functions -------------------- */ /* -------------------- Unexported Functions -------------------- */
func status(str string) string { func status(str string) string {

View File

@ -1,11 +1,7 @@
package security package security
import (
"strings"
)
type SecurityData struct { type SecurityData struct {
Dns string Dns []string
FirewallEnabled string FirewallEnabled string
FirewallStealth string FirewallStealth string
LoggedInUsers []string LoggedInUsers []string
@ -17,14 +13,11 @@ func NewSecurityData() *SecurityData {
return &SecurityData{} return &SecurityData{}
} }
func (data *SecurityData) DnsAt(idx int) string { func (data SecurityData) DnsAt(idx int) string {
records := strings.Split(data.Dns, "\n") if len(data.Dns) > idx {
return data.Dns[idx]
if len(records) > 0 && len(records) > idx {
return records[idx]
} else {
return ""
} }
return ""
} }
func (data *SecurityData) Fetch() { func (data *SecurityData) Fetch() {

View File

@ -2,20 +2,56 @@ package security
import ( import (
"os/exec" "os/exec"
"runtime"
"strings" "strings"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
// http://applehelpwriter.com/2017/05/21/how-to-reveal-hidden-users/ func loggedInUsersLinux() []string {
cmd := exec.Command("who", "-us")
users := wtf.ExecuteCommand(cmd)
func LoggedInUsers() []string { cleaned := []string{}
for _, u := range strings.Split(users, "\n") {
clean := true
col := strings.Split(u, " ")
if len(col) > 0 {
for _, cleanedU := range cleaned {
if strings.Compare(cleanedU, col[0]) == 0 {
clean = false
}
}
if clean {
cleaned = append(cleaned, col[0])
}
}
}
return cleaned
}
func loggedInUsersMacOs() []string {
cmd := exec.Command("dscl", []string{".", "-list", "/Users"}...) cmd := exec.Command("dscl", []string{".", "-list", "/Users"}...)
users := wtf.ExecuteCommand(cmd) users := wtf.ExecuteCommand(cmd)
return cleanUsers(strings.Split(users, "\n")) return cleanUsers(strings.Split(users, "\n"))
} }
// http://applehelpwriter.com/2017/05/21/how-to-reveal-hidden-users/
func LoggedInUsers() []string {
switch runtime.GOOS {
case "linux":
return loggedInUsersLinux()
case "darwin":
return loggedInUsersMacOs()
default:
return []string{}
}
}
func cleanUsers(users []string) []string { func cleanUsers(users []string) []string {
rejects := []string{"_", "root", "nobody", "daemon", "Guest"} rejects := []string{"_", "root", "nobody", "daemon", "Guest"}
cleaned := []string{} cleaned := []string{}

View File

@ -2,6 +2,7 @@ package security
import ( import (
"os/exec" "os/exec"
"runtime"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
@ -12,16 +13,58 @@ const osxWifiArg = "-I"
/* -------------------- Exported Functions -------------------- */ /* -------------------- Exported Functions -------------------- */
func WifiEncryption() string { func wifiEncryptionLinux() string {
cmd := exec.Command("nmcli", "-t", "-f", "active,security", "dev", "wifi")
out := wtf.ExecuteCommand(cmd)
name := wtf.FindMatch(`yes:(.+)`, out)
if len(name) > 0 {
return name[0][1]
}
return ""
}
func wifkEncryptionMacOS() string {
name := wtf.FindMatch(`s*auth: (.+)s*`, wifiInfo()) name := wtf.FindMatch(`s*auth: (.+)s*`, wifiInfo())
return matchStr(name) return matchStr(name)
} }
func WifiName() string { func WifiEncryption() string {
switch runtime.GOOS {
case "linux":
return wifiEncryptionLinux()
case "darwin":
return wifkEncryptionMacOS()
default:
return ""
}
}
func wifiNameMacOS() string {
name := wtf.FindMatch(`s*SSID: (.+)s*`, wifiInfo()) name := wtf.FindMatch(`s*SSID: (.+)s*`, wifiInfo())
return matchStr(name) return matchStr(name)
} }
func wifiNameLinux() string {
cmd := exec.Command("nmcli", "-t", "-f", "active,ssid", "dev", "wifi")
out := wtf.ExecuteCommand(cmd)
name := wtf.FindMatch(`yes:(.+)`, out)
if len(name) > 0 {
return name[0][1]
}
return ""
}
func WifiName() string {
switch runtime.GOOS {
case "linux":
return wifiNameLinux()
case "darwin":
return wifiNameMacOS()
default:
return ""
}
}
/* -------------------- Unexported Functions -------------------- */ /* -------------------- Unexported Functions -------------------- */
func wifiInfo() string { func wifiInfo() string {