136 lines
No EOL
5.1 KiB
Text
136 lines
No EOL
5.1 KiB
Text
---
|
|
title: "Watchtower - Git Commits analysieren"
|
|
author: "Jannis von Hagen"
|
|
date: "`r Sys.Date()`"
|
|
output: html_document
|
|
---
|
|
<div style="font-family=sans-serif; font-size:1.5rem;">
|
|
|
|
system("get.data.bat")
|
|
|
|
|
|
```{r echo=FALSE, include=FALSE, warning = FALSE}
|
|
|
|
|
|
|
|
diffs <- read.delim("data/diffs.txt")
|
|
commits <- read.csv("data/commits.txt", sep=";")
|
|
|
|
install.packages('plyr', repos = "http://cran.us.r-project.org")
|
|
install.packages('anytime', repos = "http://cran.us.r-project.org")
|
|
library('plyr')
|
|
library('anytime')
|
|
```
|
|
|
|
<hr />
|
|
|
|
## Register
|
|
|
|
- 1 Einleitung
|
|
- 1.0 Was ist git ?
|
|
- 1.1 Angriffsvektor
|
|
- 1.2 Hypothese
|
|
- 2 Aufbereitung der Daten
|
|
- 2.0 Quelle
|
|
- 2.1 Variablen
|
|
|
|
## 1 Einleitung
|
|
|
|
### 1.0 Was ist git ?
|
|
|
|
**[Git](https://git-scm.com/)** ist ein Program zur Versionskontrolle von Software und vereinfacht das Kollaborieren von mehren Leuten an einem Program. Änderungen im Quellcode werden aufgezeichnet, können zurückgesetzt werden und eine Gesamtverlust des Codes wird größtenteils verhindert.
|
|
|
|
|
|
### 1.1 Angriffsvektor
|
|
|
|
Zwar zeichnet Git Änderungen auf, allerdings wird aber immer noch darauf vertraut das die Änderungen rechtmäßig und
|
|
Vertrauenswürdig sind. Dies bedeuet das zum Beispiel durch eine Account Übernahme schädlicher Quellcode in das Repository gelangen kann, welcher dann von mehreren anderen Computern gebaut und verteilt wird.
|
|
|
|
### 1.2 Hypothese
|
|
|
|
Da Git viele Daten speichert sollte es möglich sein diese für ein beliebiges generisches Repository zu Downloaden und dann automatisch zu analysieren. Dies erzeugt hilfreiche Informationen über den generellen Status des Repositories, sowie kann es potentiell Auffällige Commits für eine manuelle Untersuchung heraussuchen.
|
|
|
|
|
|
*Der Sicherheitstechnische Ansatz dieser Arbeit ist eher ein imaginärer Ansatz anstatt eine reale Möglichkeit (Praktischer Nutzen ist aber nicht wirklich das Ziel dieser Arbeit, sodass es ignorierbar ist).
|
|
Commits in Open Source Programmen werden generell von mindestens einer Person validiert bevor sie eingeführt werden.
|
|
Code Platformen bieten starken Schutz gegen Account Übernahmen und Vandalismus in Repositories.
|
|
Wenn ein Angreifer wirklich Code in eine Software einschleußen will ist es weitaus **[diskreter](https://nvd.nist.gov/vuln/detail/CVE-2024-3094)** möglich*
|
|
<hr />
|
|
|
|
## 2 Aufbereitung der Daten
|
|
|
|
### 2.0 Quelle
|
|
Das Ziel ist eine generische Datenanalyse bei der jedes Git Repostorie genutzt werden kann für diese Arbeit habe ich mich aber dafür
|
|
entschieden das Git Repository von **[SDL](https://www.libsdl.org/)** zu analysieren.
|
|
SDL ist eine Software Bibliothek für Software die Platformübergreifend funktionieren soll. Es wird sehr häufig zur Entwicklung von Videospielen benutzt, hat 17000 Commits und ist inzwischen 26 Jahre alt.
|
|
Das spezifische Repository welches benutzt wird kann aber im dieser Arbeit mitgelieferten Quellcode geändert werden.
|
|
|
|
### 2.1 Variablen
|
|
|
|
Die Variablen die Ausgelesen werden beinhalten zwei Datensets mit einer 1:n Beziehung, da mehrere Datein in einem Commit verändert werden können
|
|
|
|
#### commits
|
|
- Commit Hash *//Representiert die Id des jeweiligen Commits*
|
|
- Name *//Name*
|
|
- Email *//Email*
|
|
- Time *//Zeitcode wann der Commit erstellt wurde*
|
|
- Signed *//Ob dieser Comit mit einem Schlüssel "unterschrieben" wurde*
|
|
|
|
#### diffs
|
|
- Commit Hash *//Representiert die Id des jeweiligen Commits*
|
|
- Add *//Menge an hinzugefügten Codezeilen*
|
|
- Remove *//Menge an entfernten Codezeilen*
|
|
- File *//Die spezifische Datei die verändert wurde*
|
|
|
|
### 2.3 Bedeutungen
|
|
|
|
Die Daten besitzen keine Fehler, müssen allerdings noch interpretiert werden.
|
|
|
|
|
|
**Time** Ist eine Unix Timestamp, also die Zeit in Sekunden seit 1970, da wir für die Analyse aber eher die Tageszeit benötigen müssen die Daten erst umgewandelt werden.
|
|
|
|
```{r}
|
|
commits$time <- lapply(commits$time, anytime)
|
|
```
|
|
|
|
|
|
|
|
**Signed** nutzt ein einzelnes Zeichen um anzuzeigen, ob der Commit signiert wurde,
|
|
dies kann bei der Analyse berücksichtigt werden und benötigt keiner eigenen Umwandlung.
|
|
|
|
**add** und **remove** von aus **diffs** hat manche Einträge die ein "-" anstatt einer Zahl besitzen.
|
|
Dies wird von Git benutzt, um anzuzeigen, dass es sich um eine binäre Datei handelt, bei welcher Zeilen Unterschiede keine logische Bedeutung haben.
|
|
Allerdings ist die tatsache, dass eine Binäre Datei geändert wurde eine weitere Variable, die möglicherweise für
|
|
das Model interessant sein könnte.
|
|
|
|
```{r}
|
|
##TODO: Cange dataset to attach "Binary files changed" to commits
|
|
```
|
|
|
|
## Quellen
|
|
|
|
Sämtlicher Quellcode dieser Arbeit ist online verfügbar unter:
|
|
https://code.booklordofthe.dev/Booklordofthedings/Watchtower
|
|
|
|
- Git
|
|
- Url: https://git-scm.com/
|
|
- Zugriff: 20.11.2024
|
|
- Diskrete Code Backdoor
|
|
- Url: https://nvd.nist.gov/vuln/detail/CVE-2024-3094
|
|
- Zugriff: 20.11.2024
|
|
- SDL
|
|
- Url: https://www.libsdl.org/
|
|
- Zugriff: 20.11.2024
|
|
|
|
## Worterklärungen
|
|
- Repository
|
|
*Ein Aufbewahrungs/Sammlungs -ort für Software Quellcode*
|
|
- Commit
|
|
*Eine bestimmte Änderung an einem Repository. Kann Datein hinzufügen, entfernen oder Ändern*
|
|
|
|
|
|
```{r}
|
|
commits_u <- count(commits$name, 'commits$name')
|
|
barplot(commits_u$freq, names.arg=commits_u$commits.name)
|
|
```
|
|
</div> |