Comments (1)
Thank you for the positive feedback on FlowDroid.
Obtaining all paths between a source and a sink is a non-trivial problem. Let's take the following code:
void main() {
String a = source();
foo(a);
}
void foo(String a) {
if (...)
sink(a);
else
foo("x" + a);
}
FlowDroid does not reason about conditionals. That means we always need to assume that both cases (then
and else
) are possible, i.e., every conditional has two control flow successors. Under this assumption, there are infinitely many flows, because we don't know how often there is a recursive call to the foo
method. If we try to output all path, the analysis will not terminate. That's why we opted for a singlr arbitrary path in the first place.
Internally, the data flow is a graph. We first track the taints across the control flow graph, which gives us a taint graph. Only afterwards, we extract a single representative path from the graph. You can also work on the full taint graph if that is better for your research question. Have a look at the IAbstractionPathBuilder
interface. It takes the graph (modeled via the abstraction that arrives at the sink and its transitive predecessors) and generated the path from it. In other words, at that stage, you get access to the full taint graph.
Analyzing web applications primarily requires generating a suitabl dummy main method (entry point) that simulates calls to all of the REST endpoints. It is a bit more complex, because frameworks such as Spring also allow for dependency injection and implicitly instantiated objects. A naive implementation isn't too hard, but if you really want to support real-world web applications, it's a lot of effort.
We have done this effort as part of our commercial code scanner VUSC. There are free academic licenses for non-profit organizations such as universities. We provide the scanner with a development environment (extended version of Eclipse) along with some examples of how to write analysis plugins and run them inside the scanner. Internally, VUSC uses Soot and FlowDroid plus a lot of private code to deal with Java web applications, Android apps, iOS apps, and more.
from flowdroid.
Related Issues (20)
- Using FlowDroid for Java Programs HOT 1
- RuntimeException: File format violation, res1 was not zero HOT 4
- Non-deterministic results from --dataflowsolver FLOWINSENSITIVE --pathalgo CONTEXTINSENSITIVE --taintwrapper EASY HOT 1
- (Question)Display SootClass and SootMethod Information for Each Stmt of Taint Path in FlowDroid HOT 2
- No sources found, aborting analysis HOT 5
- Null pointer errors when attempting to find data flow in app HOT 3
- Can not run project with FlowDroid HOT 8
- Is there a method to start taint analysis for a single variable instead of between two functions?
- Is there a taint analysis tool for open-source application HOT 3
- Why flowdroid cannot find the path from flow1 to flow2 by taint varibale Flow.data1? HOT 4
- (Question) about path between sources and sinks.
- Non-deterministic behavior of the command line tool
- Detect source method ignoring subsequent data flow tracking HOT 3
- Unable to generate the ICFG for Kotlin Composables
- How to Utilize FlowDroid to Track Implicit Data-Flow HOT 2
- Some problems in running flowdroid source code HOT 4
- About flowdroid running memory usage settings HOT 2
- Some issues regarding the call graph constructed by flowdroid HOT 3
- Creating API call graph with FlowDroid HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flowdroid.