gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-cashless2ecash] branch master updated: we need more logs


From: gnunet
Subject: [taler-cashless2ecash] branch master updated: we need more logs
Date: Wed, 29 May 2024 16:46:42 +0200

This is an automated email from the git hooks/post-receive script.

joel-haeberli pushed a commit to branch master
in repository cashless2ecash.

The following commit(s) were added to refs/heads/master by this push:
     new 31894d1  we need more logs
31894d1 is described below

commit 31894d1714a8de799fa58bed8e35c44bb94aa10a
Author: Joel-Haeberli <haebu@rubigen.ch>
AuthorDate: Wed May 29 16:46:33 2024 +0200

    we need more logs
---
 c2ec/api-bank-integration.go               |   7 +-
 c2ec/main.go                               |  17 ++++
 docs/content/implementation/a-c2ec.tex     |   6 +-
 docs/content/implementation/e-security.tex | 121 ++---------------------------
 docs/content/results/discussion.tex        |   4 +-
 docs/content/results/reflexion.tex         |  14 ++--
 docs/thesis.pdf                            | Bin 1803553 -> 1772944 bytes
 simulation/c2ec-simulation                 | Bin 8315978 -> 8315978 bytes
 8 files changed, 41 insertions(+), 128 deletions(-)

diff --git a/c2ec/api-bank-integration.go b/c2ec/api-bank-integration.go
index a295790..59625a3 100644
--- a/c2ec/api-bank-integration.go
+++ b/c2ec/api-bank-integration.go
@@ -181,9 +181,11 @@ func handleWithdrawalStatus(res http.ResponseWriter, req 
*http.Request) {
                } else {
                        // this means parameter was not given.
                        // no long polling (simple get)
+                       LogInfo("bank-integration-api", "will not start 
long-polling")
                        shouldStartLongPoll = false
                }
        } else {
+               LogInfo("bank-integration-api", "will not start long-polling")
                shouldStartLongPoll = false
        }
 
@@ -249,10 +251,13 @@ func handleWithdrawalStatus(res http.ResponseWriter, req 
*http.Request) {
                }
        } else {
                wthdrl, stat := getWithdrawalOrError(wpd)
+               LogInfo("api-bank-integration", "loaded withdrawal")
                if stat != HTTP_OK {
                        errStat <- stat
                } else {
-                       w <- wthdrl
+                       res.Header().Add(CONTENT_TYPE_HEADER, 
"application/json")
+                       res.Write(wthdrl)
+                       return
                }
        }
 
diff --git a/c2ec/main.go b/c2ec/main.go
index 3edb2ed..860d247 100644
--- a/c2ec/main.go
+++ b/c2ec/main.go
@@ -223,21 +223,25 @@ func setupBankIntegrationRoutes(router *http.ServeMux) {
                GET+BANK_INTEGRATION_API+BANK_INTEGRATION_CONFIG_PATTERN,
                bankIntegrationConfig,
        )
+       LogInfo("main", "setup 
"+GET+BANK_INTEGRATION_API+BANK_INTEGRATION_CONFIG_PATTERN)
 
        router.HandleFunc(
                GET+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_BY_WOPID_PATTERN,
                handleWithdrawalStatus,
        )
+       LogInfo("main", "setup 
"+GET+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_BY_WOPID_PATTERN)
 
        router.HandleFunc(
                POST+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_BY_WOPID_PATTERN,
                handleParameterRegistration,
        )
+       LogInfo("main", "setup 
"+POST+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_BY_WOPID_PATTERN)
 
        router.HandleFunc(
                POST+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_ABORTION_PATTERN,
                handleWithdrawalAbort,
        )
+       LogInfo("main", "setup 
"+POST+BANK_INTEGRATION_API+WITHDRAWAL_OPERATION_ABORTION_PATTERN)
 }
 
 func setupWireGatewayRoutes(router *http.ServeMux) {
@@ -246,26 +250,31 @@ func setupWireGatewayRoutes(router *http.ServeMux) {
                GET+WIRE_GATEWAY_API+WIRE_GATEWAY_CONFIG_PATTERN,
                wireGatewayConfig,
        )
+       LogInfo("main", "setup 
"+GET+WIRE_GATEWAY_API+WIRE_GATEWAY_CONFIG_PATTERN)
 
        router.HandleFunc(
                POST+WIRE_GATEWAY_API+WIRE_TRANSFER_PATTERN,
                transfer,
        )
+       LogInfo("main", "setup "+POST+WIRE_GATEWAY_API+WIRE_TRANSFER_PATTERN)
 
        router.HandleFunc(
                GET+WIRE_GATEWAY_API+WIRE_HISTORY_INCOMING_PATTERN,
                historyIncoming,
        )
+       LogInfo("main", "setup 
"+GET+WIRE_GATEWAY_API+WIRE_HISTORY_INCOMING_PATTERN)
 
        router.HandleFunc(
                GET+WIRE_GATEWAY_API+WIRE_HISTORY_OUTGOING_PATTERN,
                historyOutgoing,
        )
+       LogInfo("main", "setup 
"+GET+WIRE_GATEWAY_API+WIRE_HISTORY_OUTGOING_PATTERN)
 
        router.HandleFunc(
                POST+WIRE_GATEWAY_API+WIRE_ADMIN_ADD_INCOMING_PATTERN,
                adminAddIncoming,
        )
+       LogInfo("main", "setup 
"+POST+WIRE_GATEWAY_API+WIRE_ADMIN_ADD_INCOMING_PATTERN)
 }
 
 func setupTerminalRoutes(router *http.ServeMux) {
@@ -274,26 +283,31 @@ func setupTerminalRoutes(router *http.ServeMux) {
                GET+TERMINAL_API_CONFIG,
                handleTerminalConfig,
        )
+       LogInfo("main", "setup "+GET+TERMINAL_API_CONFIG)
 
        router.HandleFunc(
                POST+TERMINAL_API_REGISTER_WITHDRAWAL,
                handleWithdrawalSetup,
        )
+       LogInfo("main", "setup "+POST+TERMINAL_API_REGISTER_WITHDRAWAL)
 
        router.HandleFunc(
                POST+TERMINAL_API_CHECK_WITHDRAWAL,
                handleWithdrawalCheck,
        )
+       LogInfo("main", "setup "+POST+TERMINAL_API_CHECK_WITHDRAWAL)
 
        router.HandleFunc(
                GET+TERMINAL_API_WITHDRAWAL_STATUS,
                handleWithdrawalStatusTerminal,
        )
+       LogInfo("main", "setup "+GET+TERMINAL_API_WITHDRAWAL_STATUS)
 
        router.HandleFunc(
                DELETE+TERMINAL_API_ABORT_WITHDRAWAL,
                handleWithdrawalAbortTerminal,
        )
+       LogInfo("main", "setup "+DELETE+TERMINAL_API_ABORT_WITHDRAWAL)
 }
 
 func startListening(router *http.ServeMux, errs chan error) {
@@ -304,6 +318,7 @@ func startListening(router *http.ServeMux, errs chan error) 
{
 
        if CONFIG.Server.UseUnixDomainSocket {
 
+               LogInfo("main", "using domain sockets")
                socket, err := net.Listen("unix", CONFIG.Server.UnixSocketPath)
                if err != nil {
                        panic("failed listening on socket: " + err.Error())
@@ -326,10 +341,12 @@ func startListening(router *http.ServeMux, errs chan 
error) {
                }()
        } else {
 
+               LogInfo("main", "using tcp")
                go func() {
                        server.Addr = fmt.Sprintf("%s:%d", CONFIG.Server.Host, 
CONFIG.Server.Port)
                        LogInfo("main", "serving at "+server.Addr)
                        if err := server.ListenAndServe(); err != nil {
+                               LogError("main", err)
                                errs <- err
                        }
                }()
diff --git a/docs/content/implementation/a-c2ec.tex 
b/docs/content/implementation/a-c2ec.tex
index 9a9e8c8..a73b184 100644
--- a/docs/content/implementation/a-c2ec.tex
+++ b/docs/content/implementation/a-c2ec.tex
@@ -37,16 +37,16 @@ Following a short list of events and from whom they are 
triggered and who listen
     \item Payment confirmation request sent to the Bank-Integration API of 
C2EC.
     \begin{itemize}
         \item Registered by: Terminal
-        \item Listened by: Attestor
+        \item Listened by: Confirmation
     \end{itemize}
     \item Payment confirmation success will send a withdrawal operation status 
update event.
     \begin{itemize}
-        \item Registered by: Attestor
+        \item Registered by: Confirmation
         \item Listened by: Consumers (via Bank-Integration-API)
     \end{itemize}
     \item Payment confirmation failure will trigger a retry event.
     \begin{itemize}
-        \item Registered by: Attestor
+        \item Registered by: Confirmation
         \item Listened by: Retrier
     \end{itemize}
     \item Transfers which represent refunds in C2EC.
diff --git a/docs/content/implementation/e-security.tex 
b/docs/content/implementation/e-security.tex
index d55b85d..dc088dc 100644
--- a/docs/content/implementation/e-security.tex
+++ b/docs/content/implementation/e-security.tex
@@ -1,126 +1,17 @@
 \section{Security}
 
-\subsection{Threat Model}
+\subsection{General Security Considerations}
 
-The four question framework motivated by the OWASP threat modelling project 
\cite{owasp-threat-modeling-project} was leveraged to identify threats and 
discuss what to do about them.
-
-\subsubsection{Scope}
-
-The scope of the model includes the C2EC component as well as the Terminal 
application. Out of scope are the Exchange, Wallet, CLI and the payment system 
provider backend. The scope is set to only those two components, because they 
are the only one implemented during the thesis.
-
-\subsubsection{Identification of threats}
-
-To identify threats in a methodological way the STRIDE method 
\cite{owasp-threat-modeling-stride} to identify threats was applied.
-
-\begin{itemize}
-    \item \textbf{S}poofing:
-    \begin{itemize}
-        \item Terminal gets stolen and with it its credentials (A).
-        \item Attacker can imitate the payment system provider backend (B). 
-    \end{itemize}
-    \item \textbf{T}ampering:
-    \begin{itemize}
-        \item Abort withdrawals...
-        \begin{enumerate}
-            \item by reading a WOPID from the URL (C)
-            \item by guessing the WOPID (D)
-        \end{enumerate}
-        \item Trigger confirmation requests with stolen terminal. (E)
-        \item Poisoning the provider configuration. (F)
-    \end{itemize}
-    \item \textbf{R}epudiation:
-    \begin{itemize}
-        \item Same terminal credentials for more than one terminal. (G)
-    \end{itemize}
-    \item \textbf{I}nformation Disclosure:
-    \begin{itemize}
-        \item URL discloses WOPID (H)
-        \item Weak passwords (I)
-    \end{itemize}
-    \item \textbf{D}enial of Service:
-    \begin{itemize}
-        \item Use unauthenticated Bank-Integration API to generate heavy load 
on the server. (J)
-        \item Trigger the withdrawal confirmation process through stolen 
terminal access tokens. (E)
-    \end{itemize}
-    \item \textbf{E}levation of Privileges:
-    \begin{itemize}
-        \item Bad configuration (K)
-        \item Using the same user for all duties. (L)
-        \item Weak passwords (I)
-    \end{itemize}
-\end{itemize}
-
-\subsubsection{Response and Mitigations}
-
-To define what to do about risks which occur due to the above mentioned 
threats an understanding of the impact of the threat need
-
-To understand the impact when a threat is exploited they are assessed and 
prioritized for further analysis using following risk assessment scheme:
-
-\begin{center}
-$risk = probability * impact$
-\end{center}
-
-There is no data available. The probability is guessed and motivated. The risk 
assessment assumes that a secure platform is used to run the system. This 
includes network level preventions of security issues such as ARP- or DNS 
poisoning are installed. This means only application level probabilities are 
considered. Additionally it is assumed that the operator behaves as the 
configuration suggests and leverages a security wise sound process during the 
configuration and deployment of C2EC.
-
-Values for \textbf{probability} (P) are motivated because of the following 
categories:
-\begin{itemize}
-    \item 1: The event will occur less than once a year.
-    \item 2: The event will occur on a monthly base.
-    \item 3: The event will occur on a daily base.
-\end{itemize}
-
-Values for the \textbf{impact} (I) are motivated through the following table:
-\begin{itemize}
-    \item 1: The exploitation will have no cost effects for the Exchange 
operator.
-    \item 2: The exploitation will lead to manual expense and therefore costs.
-    \item 3: The exploitation will lead to loss of money.
-\end{itemize}
-
-% table: probability, impact, risk, description
-
-\begin{table}[H]
-    \centering
-    \caption{Risk assessment}
-    \label{sec-implementation-security-risk}
-    
\begin{tabularx}{\textwidth}{p{0.1\textwidth}|p{0.1\textwidth}|p{0.1\textwidth}|p{0.1\textwidth}|p{0.4\textwidth}}
-        \hline
-        \textbf{Id} & \textbf{P} & \textbf{I} & \textbf{Risk} & 
\textbf{Description} \\
-        \hline
-        A & 3 & 1 & 3 & \\
-        \hline
-        B & 1 & 3 & 3 & \\
-        \hline
-        C & 3 & 2 & 6 & \\
-        \hline
-        D & 1 & 2 & 2 & \\
-        \hline
-        E & 3 & 1 & 3 & \\
-        \hline
-        F & 1 & 3 & 3 & \\
-        \hline
-        G & 2 & 1 & 2 & \\
-        \hline
-        H & 3 & 2 & 6 & \\
-        \hline
-        I & 1 & 3 & 3 & \\
-        \hline
-        J & 3 & 2 & 6 & \\
-        \hline
-        K & 1 & 3 & 3 & \\
-        \hline
-        L & 2 & 1 & 2 & \\
-        \hline
-    \end{tabularx}
-\end{table}
+To review and validate the threat model, two cases were reviewed. The first 
mirrors the easiest attack (EAV eavesdropping and abusing WOPID). The second 
case reviews where the most harm can be possibly be done to the system. 
 
-\subsubsection{Review and Validation}
+\subsubsection{EAV abusing WOPID}
 
-To review and validate the threat model, two cases were reviewed. The first 
mirrors the easiest attack (EAV eavesdropping and abusing WOPID). The second 
case reviews where the most harm can be possibly be done to the system. 
+A WOPID can be abused triggering a confirmation or an abort request at the 
Terminals API or an abort request at the Bank-Integration API. 
 
-Case 1:
+The first two cases are mitigated through the authentication of the terminals. 
When the EAV can somehow access the communication between a terminal and C2EC, 
the WOPID cannot be abused without also breaking the terminals credentials. 
What if the attacker decides to use the unauthenticated Bank-Integration API 
the wallet is normally using? The specification does not require some proof 
that the requester is the wallet. This could lead to tampering of the 
withdrawals in the time window of t [...]
 
+\subsubsection{}
 
-Case 2:
 This case is possible, when an attacker can trick the C2EC to have confirmed 
withdrawals in its withdrawal table, without having a real confirmation of the 
payment service provider. This means the attacker can steal money from the 
exchange. For this an attacker would need to have the possibility to somehow 
trick the confirmation process of C2EC to issue confirmation requestes against 
a backend controlled by the attacker. This backend would then confirm the 
withdrawal. This will lead to t [...]
 
 \subsection{Withdrawal Operation Identifier (WOPID)}
diff --git a/docs/content/results/discussion.tex 
b/docs/content/results/discussion.tex
index 6aea8e1..cceddc7 100644
--- a/docs/content/results/discussion.tex
+++ b/docs/content/results/discussion.tex
@@ -28,9 +28,7 @@ C2EC introduces new ways to access digital cash using GNU 
Taler. Due to the shor
 \subsection{Improvements}
 \begin{enumerate}
     \item Run the existing implementation as part of the BFH Taler CHF-Exchange
-    \item Approve Paydroid app: Let Wallee check the terminal app and run it 
on a Wallee terminal on behalf of the BFH. 
+    \item Paydroid app: Run a Wallee terminal on behalf of the BFH. 
     \item C2EC: Remove doubled provider structures. Currently providers are 
saved to the database and must be configured in the configuration. To make the 
setup and management easier, the providers could only be configured inside the 
configuration.
-    \item App: Automatically trigger long poll request for parameter 
selection. Due to the lack of time, the long-poll request for the parameter 
selection on the side of the terminal was not implemented to be automatically 
but will only be sent, when the user clicks on the \textit{authorize} button. 
The request shall be triggered in the background instead.
-    \item The Wallee-Transaction payto target type is currently abused and not 
implemented in conformance of the specification in the GANA. To resolve this 
issue, the Wallee-Transaction identifier needs to be saved alongside the 
merchant reference which is currently used for the lookup of the transaction.
     \item IPv6 support: The process must also listen on IPv6 addresses. 
 \end{enumerate}
diff --git a/docs/content/results/reflexion.tex 
b/docs/content/results/reflexion.tex
index 52eb79c..a834384 100644
--- a/docs/content/results/reflexion.tex
+++ b/docs/content/results/reflexion.tex
@@ -10,22 +10,24 @@ The implementation of C2EC was the biggest part of my work 
during the thesis. It
 
 In Go code of the C2EC component I had to implement a robust way to 
communicate between parallel running processes. Go's concurrency model made 
this possible in an easy and what I think, comprehensible way. I correctly 
anticipated that it would pay out to first implement the concepts for my 
requirements in a dummy project and then adapt this to C2EC. Additionally the 
implementation of the database access layer behind an interface allows to 
change the database easily. 
 
-Concerning the extensibility of C2EC I was able to implement nice code level 
abstractions which allow an easy integration of additional payment system 
providers. After the feedback of Prof. Dr. Christian Grothoff I was able to 
eliminate an unnecessary layer of abstraction, which makes it even easier.
+Concerning the extensibility of C2EC I was able to implement code level 
abstractions which allow an easy integration of additional payment system 
providers. After the feedback of Prof. Dr. Christian Grothoff I was could 
eliminate an unnecessary layer of abstraction, which makes it even easier.
 
-I think I could apply a lot of knowledge I gained through the past three 
years. It happened a lot that I was thinking: "ah, this is why the professor 
told us this". This helped me to harden my understanding of various topics.
+I think I could apply a lot of knowledge I gained through the past three 
years. From time to time I was thinking: "ah, this is why the professor told us 
this". This helped me to harden my understanding of various topics.
 
 \subsubsection{Paydroid Terminal Application}
 
-The paydroid application was challenging to me since I never wrote a real 
Android application on my own. Therefore I think I did a good job by 
implementing a best practice structure with the view models, composable and 
navigation controller. Through the feedback of Prof. Dr. Benjamin Fehrensen I 
was able to verify the correctness of these best practices. 
+The paydroid application was challenging to me since I never wrote a real 
Android application on my own. That's why I think I did a good job by 
implementing a best practice structure with the view models, composable and 
navigation controller. Through the feedback of Prof. Dr. Benjamin Fehrensen I 
was able to verify the correctness of these best practices. 
 
-I first had problems to understand how exactly the versioning in Android works 
and that the backward compatibility is given even when big time gaps between 
the feature needed and the version I was big. In the beginning I suffered a 
little to understand the difference of the none compose and compose era of 
Android programming. 
+I first had problems to understand how exactly the versioning in Android 
works. The backward compatibility is given even when big time gaps between the 
feature needed and the version in use occur. In the beginning I suffered a 
little to understand the difference of the none compose and compose era of 
Android programming and mixed the patterns. In the end I think I implemented a 
modern Android app.
 
-Since the app needs to do stuff in the background I had to understand how this 
could be achieved. Therefore I needed to understand how I can access other 
threads. I think in this area is the biggest shortcoming of my implementation. 
I failed to implement a proper asynchronous state-handling. Threads running 
detached from the UI-Thread will update the model, which will lead to the 
regeneration of the composables. I think it would be a better way to implement 
a proper pub / sub model using [...]
+Since the app needs to do requests in the background I had to understand how 
this could be achieved. Therefore I needed to understand how I can access other 
threads. I think in this area is the biggest shortcoming of my implementation. 
I failed to implement a proper asynchronous state-handling. Threads running 
detached from the UI-Thread will update the model, which will lead to the 
regeneration of the composables. I think it would be a better way to implement 
a proper pub / sub model us [...]
 
 \subsection{Methodically}
 
-
+To organize the work I did a rough planning of the work and the artefacts. On 
top of this plan I did a weekly iterative planning of the work I wanted to do. 
This plan was presented through the weekly meeting with Prof. Dr. Christian 
Grothoff and Prof. Dr. Benjamin Fehrensen. Sometimes the plan needed to be 
sligthly adjusted due to their feedback. This led to the organization of doing 
my planning at thursday night so I could plan my work and adjust the plan after 
our weekly meeting at wed [...]
 
 \subsection{Personally}
 
+The thesis was constrained with a lot of insecurities for me. How does the 
process look? How can I implement the process? How does GNU Taler even work? 
How does Wallee work? In the end I am proud of what I accomplished during the 
thesis. I was able to understand the API and write a program which fulfills the 
properties needed for the withdrawal. Additionally I could learn a lot about 
designing an API. I am thankful that the Bern University of Applied Sciences 
supports free software proje [...]
 
+The world of payment systems seems a bit chaotic to me. I think this is the 
result of a lot of different approaches developed at the same time for the same 
problem. There are standards but they mainly suggest things and do not enforce 
them. The technical documentation is obfuscated in big documents with a lot of 
boiler plate text. This makes it very hard to do the correct thing from my 
point of view.
diff --git a/docs/thesis.pdf b/docs/thesis.pdf
index 864e1d2..fb1a1a7 100644
Binary files a/docs/thesis.pdf and b/docs/thesis.pdf differ
diff --git a/simulation/c2ec-simulation b/simulation/c2ec-simulation
index 1936d74..14a437a 100755
Binary files a/simulation/c2ec-simulation and b/simulation/c2ec-simulation 
differ

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]