rework eros and make minor CLI adjustments

This commit is contained in:
kayos 2021-06-15 13:23:53 -07:00
parent 52c1f28f80
commit 8f63a56d67
2 changed files with 54 additions and 36 deletions

4
go.sum

@ -30,8 +30,6 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/c-bata/go-prompt v0.2.5 h1:3zg6PecEywxNn0xiqcXHD96fkbxghD+gdB2tbsYfl+Y=
github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw=
github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI=
github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
@ -177,8 +175,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw=
github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
github.com/plar/go-adaptive-radix-tree v1.0.4 h1:Ucd8R6RH2E7RW8ZtDKrsWyOD3paG2qqJO0I20WQ8oWQ=
github.com/plar/go-adaptive-radix-tree v1.0.4/go.mod h1:Ot8d28EII3i7Lv4PSvBlF8ejiD/CtRYDuPsySJbSaK8=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=

@ -27,12 +27,16 @@ import (
)
var (
// deviceDb will hold details about devices discovered
deviceDb *bitcask.Bitcask
// attackDb will hold details about exploits to be used against BLE devices
attackDb *bitcask.Bitcask
// serviceDb will hold definitions of various bluetook services and will ultimately be updated via an HTTP repository
serviceDb *bitcask.Bitcask
// devices will hold details about devices discovered
// exploits will hold details about exploits to be used against BLE devices
// services will hold definitions of various bluetook services and will ultimately be updated via an HTTP repository
// manufacturers will hold manufacturer to UUID correlations
dbs = []string {
"devices",
"exploits",
"services",
"manufacturers",
}
err error
Manufacturers ManufData
@ -41,9 +45,10 @@ var (
DataDir string = "./.eros-data/"
)
var DB map[string]*bitcask.Bitcask
// Ingest UUID will add the UUID to the manufacturer if it doesn't already exist
func (manuf *Manufacturer) IngestUUID(uuid bluetooth.UUID) bool {
contains := func(s []bluetooth.UUID, v bluetooth.UUID) bool {
for _, a := range s {
if a == v {
@ -72,8 +77,8 @@ func ManufLoad() {
f, err := os.Open(path)
if err != nil {
log.Debug().Msg(err.Error())
os.Exit(1)
log.Error().Err(err).
Msg("Failed to open JSON file")
}
defer f.Close()
@ -132,44 +137,49 @@ func ManufLoad() {
Manufacturers.Entries = append(Manufacturers.Entries, *mf)
}
}
for _, manuf := range Manufacturers.Entries {
var jsonData []byte
jsonData, err = json.Marshal(manuf)
if err != nil {
log.Fatal().Err(err).
Msg("EROS_FATAL_MANUFACTURER_JSON_MARSHAL")
}
err := DB["manufacturers"].Put([]byte(manuf.Name), jsonData)
if err != nil {
log.Fatal().Err(err).
Msg("EROS_FATAL_MANUFACTURER_JSON_STORE")
}
log.Debug().Str("Name", manuf.Name).
Msg("EROS_MANUFACTURER_STORE")
}
}
// Awaken - create the data directory if it does not exist; initialize bitcask in this directory
func Awaken() {
//log.Debug().Str("DataDir",DataDir).Msg("Initializing eros...")
deviceDb, err = bitcask.Open(DataDir + "devices")
if err != nil {
panic(err.Error)
}
attackDb, err = bitcask.Open(DataDir + "exploits")
if err != nil {
panic(err.Error)
}
serviceDb, err = bitcask.Open(DataDir + "services")
if err != nil {
panic(err.Error)
DB = make(map[string]*bitcask.Bitcask)
for _, name := range dbs {
DB[name], err = bitcask.Open(DataDir + name)
if err != nil {
panic(err.Error())
}
}
}
// Slumber - Clean up database entries, sync them to persistent storage, and safelty close the database.
func Slumber() {
rest := func(db *bitcask.Bitcask) {
for _, db := range DB {
db.Merge()
db.Sync()
db.Close()
}
rest(deviceDb)
rest(attackDb)
rest(serviceDb)
}
// Exists - check if a device is present in the Database
func Exists(Addr string) bool {
if deviceDb.Has([]byte(Addr)) {
if DB["devices"].Has([]byte(Addr)) {
return true
}
@ -200,7 +210,7 @@ func Remember(dev Device) error {
return err
}
err = deviceDb.Put([]byte(dev.Addr), jsonData)
err = DB["devices"].Put([]byte(dev.Addr), jsonData)
return err
}
@ -210,7 +220,7 @@ func Recall(Addr string) (Device, error) {
var bytes []byte
var member Device
bytes, err = deviceDb.Get([]byte(Addr))
bytes, err = DB["devices"].Get([]byte(Addr))
if err != nil {
member = Device{}
@ -221,6 +231,18 @@ func Recall(Addr string) (Device, error) {
return member, err
}
func Backup(path string) {
for _, db := range DB {
db.Merge()
db.Sync()
err := db.Backup(path)
if err != nil {
panic(err.Error())
}
}
}
// Hypnosis - retrieve new exploits/attacks from a remote http repository
func Hypnosis(repo string) {
// placeholder