-
-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(threat): add Verify datasets function (#165)
* feat(threat): concat w/o fmt Signed-off-by: Dwi Siswanto <[email protected]> * feat(threat): add Verify func to checks datasets integrity Signed-off-by: Dwi Siswanto <[email protected]> * feat(threat): add license header Signed-off-by: Dwi Siswanto <[email protected]> * refactor(threat): update corrupted term to malformed Signed-off-by: Dwi Siswanto <[email protected]> * feat(teler): implement Verify datasets (checksum) Signed-off-by: Dwi Siswanto <[email protected]> --------- Signed-off-by: Dwi Siswanto <[email protected]>
- Loading branch information
1 parent
941152d
commit 99e86bb
Showing
6 changed files
with
126 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// Licensed to Dwi Siswanto under one or more agreements. | ||
// Dwi Siswanto licenses this file to you under the Apache 2.0 License. | ||
// See the LICENSE-APACHE file in the project root for more information. | ||
|
||
package threat | ||
|
||
import ( | ||
"bufio" | ||
"fmt" | ||
"strings" | ||
|
||
"net/http" | ||
"path/filepath" | ||
|
||
"github.com/codingsince1985/checksum" | ||
) | ||
|
||
// Verify checks the integrity of files by comparing their checksums with the | ||
// MD5 sums obtained from a teler-resources repository. | ||
// | ||
// It fetches the MD5 sums, verifies that the fetched data is correct, and then | ||
// checks the checksums of the local files against the obtained MD5 sums. It | ||
// returns true if all checksums match, otherwise returns false along with an | ||
// error if any issues occur during the verification process. | ||
func Verify() (bool, error) { | ||
md5sums, err := fetchMD5Sums() | ||
if err != nil { | ||
return false, err | ||
} | ||
|
||
return verifyChecksums(md5sums) | ||
} | ||
|
||
// fetchMD5Sums retrieves MD5 sums from a remote source and returns them as a | ||
// map where filenames are the keys and MD5 sums are the values. | ||
// | ||
// In case of an error during the retrieval, it returns an error. | ||
func fetchMD5Sums() (map[string]string, error) { | ||
// Initialize a map to store the MD5 sums | ||
md5sums := make(map[string]string) | ||
|
||
resp, err := http.Get(sumURL) | ||
if err != nil { | ||
return md5sums, fmt.Errorf(errGetSumFile, err) | ||
} | ||
defer resp.Body.Close() | ||
|
||
// Create a scanner to read the file content line by line | ||
scanner := bufio.NewScanner(resp.Body) | ||
for scanner.Scan() { | ||
line := scanner.Text() | ||
|
||
// Split each line into filename and MD5 sum | ||
parts := strings.Fields(line) | ||
if len(parts) == 2 { | ||
filename, md5 := parts[1], parts[0] | ||
if filename == dbFile { | ||
continue | ||
} | ||
|
||
md5sums[filename] = md5 | ||
} | ||
} | ||
|
||
// Check for errors during scanning | ||
if err := scanner.Err(); err != nil { | ||
return md5sums, fmt.Errorf(errReadSumFile, err) | ||
} | ||
|
||
return md5sums, nil | ||
} | ||
|
||
// verifyChecksums compares the MD5 sums obtained from a remote source | ||
// with the local checksums of the files. It takes a map of filenames to | ||
// MD5 sums as input and returns true if all checksums match, otherwise | ||
// returns false along with an error if any checksums do not match. | ||
func verifyChecksums(md5sums map[string]string) (bool, error) { | ||
for _, threat := range List() { | ||
p, err := threat.Filename(true) | ||
if err != nil { | ||
return false, err | ||
} | ||
|
||
sum, err := checksum.MD5sum(p) | ||
if err != nil { | ||
return false, fmt.Errorf(errChecksum, p, err) | ||
} | ||
|
||
f := filepath.Base(p) | ||
if md5sum := md5sums[f]; sum != md5sum { | ||
return false, fmt.Errorf(errMalformed, threat.String(), md5sum, sum) | ||
} | ||
} | ||
|
||
return true, nil | ||
} |
99e86bb
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold
2
.BenchmarkInitializeWithoutCVE
62296184
ns/op 44603144 B/op 98679 allocs/op29574100
ns/op 43949236 B/op 97946 allocs/op2.11
BenchmarkInitializeWithoutCVE - ns/op
62296184
ns/op29574100
ns/op2.11
This comment was automatically generated by workflow using github-action-benchmark.
99e86bb
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold
2
.BenchmarkInitializeCommonWebAttack
57596321
ns/op 44604459 B/op 98683 allocs/op28559147
ns/op 43950038 B/op 97947 allocs/op2.02
BenchmarkInitializeCommonWebAttack - ns/op
57596321
ns/op28559147
ns/op2.02
BenchmarkInitializeCVE
58119357
ns/op 44603451 B/op 98681 allocs/op28822842
ns/op 43949636 B/op 97946 allocs/op2.02
BenchmarkInitializeCVE - ns/op
58119357
ns/op28822842
ns/op2.02
BenchmarkInitializeBadCrawler
59175319
ns/op 44602494 B/op 98680 allocs/op28862908
ns/op 43949102 B/op 97944 allocs/op2.05
BenchmarkInitializeBadCrawler - ns/op
59175319
ns/op28862908
ns/op2.05
BenchmarkInitializeDirectoryBruteforce
63343379
ns/op 44603967 B/op 98682 allocs/op29612099
ns/op 43949703 B/op 97946 allocs/op2.14
BenchmarkInitializeDirectoryBruteforce - ns/op
63343379
ns/op29612099
ns/op2.14
BenchmarkInitializeWithoutCommonWebAttack
59831339
ns/op 44602532 B/op 98677 allocs/op29619594
ns/op 43949312 B/op 97945 allocs/op2.02
BenchmarkInitializeWithoutCommonWebAttack - ns/op
59831339
ns/op29619594
ns/op2.02
BenchmarkInitializeWithoutCVE
60423723
ns/op 44601956 B/op 98678 allocs/op29574100
ns/op 43949236 B/op 97946 allocs/op2.04
BenchmarkInitializeWithoutCVE - ns/op
60423723
ns/op29574100
ns/op2.04
BenchmarkInitializeWithoutDirectoryBruteforce
58810024
ns/op 44604298 B/op 98681 allocs/op29404007
ns/op 43949140 B/op 97944 allocs/op2.00
BenchmarkInitializeWithoutDirectoryBruteforce - ns/op
58810024
ns/op29404007
ns/op2.00
This comment was automatically generated by workflow using github-action-benchmark.