From 4dabf064687941125851fa4f158cf63a1089519a Mon Sep 17 00:00:00 2001 From: "Specht, Tobias" Date: Wed, 21 Apr 2021 20:32:15 +0200 Subject: [PATCH] Initial commit --- .gitignore | 15 ++++ README.md | 122 ++++++++++++++++++++++++- build.sbt | 95 ++++++++++++++++++++ project/build.properties | 1 + project/plugins.sbt | 1 + res/graph.png | Bin 0 -> 99250 bytes scripts/joern-json-csv.py | 37 ++++++++ src/main/scala/Main.scala | 181 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 build.sbt create mode 100644 project/build.properties create mode 100644 project/plugins.sbt create mode 100644 res/graph.png create mode 100755 scripts/joern-json-csv.py create mode 100644 src/main/scala/Main.scala diff --git a/.gitignore b/.gitignore index 9c07d4a..4f31ac9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,17 @@ *.class *.log +# scala ignores +# Simple Build Tool +# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control +dist/* +target/ +lib_managed/ +src_managed/ +project/boot/ +project/plugins/project/ +.history +.cache +.lib/ +# IDE ignores +.bsp/ +.idea/ diff --git a/README.md b/README.md index 4289bb8..dc53e3a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,122 @@ # joernCpgExport -Export ShiftLeft Code Property Graph (cpg) from OverflowDB to json and csv +Export ShiftLeft Code Property Graph (cpg) from OverflowDB to json and csv. +The csv can be imported into the Neo4j graph database. +Neo4j can be used to visualize the graph and to write queries via cypher. + +**Please note:** The OverflowDB file format is not compatible between different versions. +Be sure to use the same OverflowDB version in joern and joernCpgExport. + +Reference: +* https://github.com/ShiftLeftSecurity/codepropertygraph +* https://github.com/ShiftLeftSecurity/joern/ +* https://github.com/ShiftLeftSecurity/overflowdb +* https://neo4j.com/ + +## Build +```shell +$ sbt stage +``` + +## Usage +```shell +$ ./target/universal/stage/bin/joernCpgExport --help +Usage: joernCpgExport [options] + + -d, --no-default-overlays do not apply default overlays + -o, --no-oss-dataflow do not apply oss dataflow overlay + -c, --cpg load cpg from OverflowDB + -j, --json export cpg as json file + --help prints this usage text +``` + +## Example +```shell +# use fuzzyc2cpg from joern to parse source code and create OverflowDB +$ fuzzyc2cpg.sh --output cpg.bin src +# convert OverflowDB into json +$ joernCpgExport --cpg cpg.bin --json cpg.json +``` + +cpg.json: +```json +{ + "nodes" : [ { + "ID" : 1, + "OVERLAYS" : [ "semanticcpg", "dataflowOss" ], + "VERSION" : "0.1", + "LANGUAGE" : "C", + "TYPE" : "META_DATA" + }, { + "ID" : 2, + "FULL_NAME" : "", + "ORDER" : 1, + "TYPE" : "NAMESPACE_BLOCK", + "NAME" : "", + "FILENAME" : "" + }, { + "ID" : 100, + "TYPE_DECL_FULL_NAME" : "", + "NAME" : "", + "FULL_NAME" : "", + "TYPE" : "TYPE" + }, { + "ID" : 101, + "TYPE_DECL_FULL_NAME" : " [ 1 ]", + "NAME" : " [ 1 ]", + "FULL_NAME" : " [ 1 ]", + "TYPE" : "TYPE" + }, + [...] + ] +} +``` + +## Convert json to csv +You can convert the json file into csv, grouped by node type. +The csv files can be imported into Neo4j via bulk import. +The csv files will be created in the `csv` subfolder of the basedir of the provided `cpg.json`. +Existing files will be overwritten. +```shell +# we need pandas as dependency +$ pip3 install --user pandas +$ scripts/joern-json-csv.py +``` +csv/edge.csv: +```csv +:END_ID,:START_ID,:TYPE,VARIABLE +1024809,1313,REF, +1154373,1314,REF, +1024810,1315,REF, +1154374,1316,REF, +1030528,1317,REF, +1154375,1318,REF, +1024811,1319,REF, +1154376,1320,REF, +1154377,1321,REF, +1154378,1322,REF, +1154379,1323,REF, +``` + +## Import into Neo4j +Neo4j offers two methods to import csv data: 1) via cypher `LOAD CSV` command and 2) via the `neo4j-admin` command. +For (1) you need first to create the graph model. Data types of the csv columns must be explicitly converted during loading. +For (2) the database must be empty (delete all nodes and relations seems not to be sufficient). Data types are detected automatically, or via column header. +See also: https://neo4j.com/developer/guide-import-csv/ + +Neo4j commands: +```shell +# stop Neo4j service +$ neo4j stop +# delete database +$ rm -rf data +# set Neo4j admin password +$ neo4j-admin set-initial-password +# batch import +$ neo4j-admin import --multiline-fields=true --quote=\" --relationships=csv/edge.csv --nodes=csv/vertex_BLOCK.csv --nodes=csv/vertex_CALL.csv ... +# start Neo4j service +$ neo4j start +``` + +Cpg viewed via Neo4j web UI: + +![graph](res/graph.png) \ No newline at end of file diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000..c453c17 --- /dev/null +++ b/build.sbt @@ -0,0 +1,95 @@ + +// The simplest possible sbt build file is just one line: + +scalaVersion := "2.13.3" +// That is, to create a valid sbt build, all you've got to do is define the +// version of Scala you'd like your project to use. + +// ============================================================================ + +// Lines like the above defining `scalaVersion` are called "settings". Settings +// are key/value pairs. In the case of `scalaVersion`, the key is "scalaVersion" +// and the value is "2.13.3" + +// It's possible to define many kinds of settings, such as: + +name := "joernCpgExport" +organization := "de.peckto" +version := "1.0" + +// Note, it's not required for you to define these three settings. These are +// mostly only necessary if you intend to publish your library's binaries on a +// place like Sonatype or Bintray. + + +// Want to use a published library in your project? +// You can define other libraries as dependencies in your build like this: + +libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" + +// Here, `libraryDependencies` is a set of dependencies, and by using `+=`, +// we're adding the scala-parser-combinators dependency to the set of dependencies +// that sbt will go and fetch when it starts up. +// Now, in any Scala file, you can import classes, objects, etc., from +// scala-parser-combinators with a regular import. + +// TIP: To find the "dependency" that you need to add to the +// `libraryDependencies` set, which in the above example looks like this: + +// "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2" + +// You can use Scaladex, an index of all known published Scala libraries. There, +// after you find the library you want, you can just copy/paste the dependency +// information that you need into your build file. For example, on the +// scala/scala-parser-combinators Scaladex page, +// https://index.scala-lang.org/scala/scala-parser-combinators, you can copy/paste +// the sbt dependency from the sbt box on the right-hand side of the screen. + +// IMPORTANT NOTE: while build files look _kind of_ like regular Scala, it's +// important to note that syntax in *.sbt files doesn't always behave like +// regular Scala. For example, notice in this build file that it's not required +// to put our settings into an enclosing object or class. Always remember that +// sbt is a bit different, semantically, than vanilla Scala. + +// ============================================================================ + +// Most moderately interesting Scala projects don't make use of the very simple +// build file style (called "bare style") used in this build.sbt file. Most +// intermediate Scala projects make use of so-called "multi-project" builds. A +// multi-project build makes it possible to have different folders which sbt can +// be configured differently for. That is, you may wish to have different +// dependencies or different testing frameworks defined for different parts of +// your codebase. Multi-project builds make this possible. + +// Here's a quick glimpse of what a multi-project build looks like for this +// build, with only one "subproject" defined, called `root`: + +// lazy val root = (project in file(".")). +// settings( +// inThisBuild(List( +// organization := "ch.epfl.scala", +// scalaVersion := "2.13.3" +// )), +// name := "hello-world" +// ) + +// To learn more about multi-project builds, head over to the official sbt +// documentation at http://www.scala-sbt.org/documentation.html + +val cpgVersion = "1.3.121" + +libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3" % Runtime + +libraryDependencies += "io.shiftleft" % "overflowdb-tinkerpop3" % "1.11" + +libraryDependencies += "io.shiftleft" %% "codepropertygraph" % cpgVersion +libraryDependencies += "io.shiftleft" %% "semanticcpg" % cpgVersion +libraryDependencies += "io.shiftleft" %% "dataflowengineoss" % cpgVersion + +libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.2.2" +libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.12.2" +libraryDependencies += "com.github.scopt" %% "scopt" % "4.0.0" + +enablePlugins(JavaAppPackaging) + +scalacOptions := List("-encoding", "utf8", "-Xfatal-warnings", "-deprecation", "-unchecked") diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000..dbae93b --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.4.9 diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 0000000..550788d --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1") \ No newline at end of file diff --git a/res/graph.png b/res/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..b18c2edd755ae1f66643f8e102d82881624928e5 GIT binary patch literal 99250 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 CT56~O literal 0 HcmV?d00001 diff --git a/scripts/joern-json-csv.py b/scripts/joern-json-csv.py new file mode 100755 index 0000000..f52f24b --- /dev/null +++ b/scripts/joern-json-csv.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import sys +import os +import json +import pandas as pd + + +def joern_json_csv(path): + base = os.path.dirname(path) + csv_dir = os.path.join(base, 'csv') + if not os.path.exists(csv_dir): + os.mkdir(csv_dir) + + j = json.load(open(path)) + vertex = pd.DataFrame(j['nodes']) + edge = pd.DataFrame(j['edges']) + d = {'nodes': []} + for label in vertex['TYPE'].unique(): + df = vertex[vertex['TYPE'] == label] + df = df.dropna(how='all', axis=1) + df = df.rename(columns={'ID': f'{label}:ID', 'TYPE': ':LABEL'}) + f = os.path.join(csv_dir, f'vertex_{label}.csv') + d['nodes'].append(f) + df.to_csv(f, index=False) + + edge = edge.dropna(how='all', axis=1) + edge = edge.rename( + columns={'outV': ':END_ID', 'inV': ':START_ID', 'TYPE': ':TYPE'}) + f = os.path.join(csv_dir, 'edge.csv') + d['relationships'] = f + edge.to_csv(f, index=False) + + return d + + +if __name__ == '__main__': + joern_json_csv(sys.argv[1]) diff --git a/src/main/scala/Main.scala b/src/main/scala/Main.scala new file mode 100644 index 0000000..a44dad1 --- /dev/null +++ b/src/main/scala/Main.scala @@ -0,0 +1,181 @@ +import java.io.StringWriter +import java.io.PrintWriter +import java.io.File +import scala.jdk.CollectionConverters._ +import com.fasterxml.jackson.databind.json.JsonMapper +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.module.scala.DefaultScalaModule +import overflowdb.{Config, Edge, Node} +import io.shiftleft.codepropertygraph.cpgloading.{CpgLoader, CpgLoaderConfig} +import io.shiftleft.codepropertygraph.Cpg +import io.shiftleft.semanticcpg.layers.{LayerCreator, LayerCreatorContext, Scpg} +import io.shiftleft.dataflowengineoss.layers.dataflows.OssDataFlow +import io.shiftleft.dataflowengineoss.layers.dataflows.OssDataFlowOptions +import org.slf4j.{Logger, LoggerFactory} +import scopt.OParser +import overflowdb.traversal._ + + +case class Args( + loadDefaultOverlays: Boolean = true, + loadOssDataflowOverlay: Boolean = true, + loadCpg: File = new File("."), + json: File = new File("."), + ) + + +object Main { + private val logger: Logger = LoggerFactory.getLogger(Main.getClass) + + def convertNode(node: Node) : Map[String, Object] = { + node.propertyMap.asScala.addAll(List( + ("TYPE", node.label), + ("ID", node.id().asInstanceOf[Object]) + )).toMap + } + + def convertEdge(edge: Edge) : Map[String, Object] = { + edge.propertyMap.asScala.addAll(List( + ("TYPE", edge.label), + ("outV", edge.inNode.id()), + ("inV", edge.outNode.id()) + )).toMap + } + + // source: io.shiftleft.codepropertygraph:console/src/main/scala/io/shiftleft/console/Console.scala + def applyDefaultOverlays(cpg: Cpg): Cpg = { + val appliedOverlays = io.shiftleft.semanticcpg.Overlays.appliedOverlays(cpg) + if (appliedOverlays.isEmpty && !(new Scpg().probe(cpg))) { + logger.info("Adding default overlays...") + val overlayCreators = List(new Scpg) + _runAnalyzer(cpg, overlayCreators: _*) + } + cpg + } + + // source: io.shiftleft.codepropertygraph:console/src/main/scala/io/shiftleft/console/Console.scala + def _runAnalyzer(cpg: Cpg, overlayCreators: LayerCreator*): Cpg = { + overlayCreators.foreach { creator => + runCreator(cpg, creator) + } + cpg + } + + // source: io.shiftleft.codepropertygraph:console/src/main/scala/io/shiftleft/console/Console.scala + protected def runCreator(cpg: Cpg, creator: LayerCreator): Unit = { + logger.info(s"Applying overlay: ${creator.overlayName}") + val context = new LayerCreatorContext(cpg) + creator.run(context) + } + + def loadCpg(cpgFilename: File): Cpg = { + // source: io.shiftleft.codepropertygraph:console/src/main/scala/io/shiftleft/console/Console.scala + val odbConfig = Config.withDefaults.withStorageLocation(cpgFilename.toString) + val config = CpgLoaderConfig.withDefaults.doNotCreateIndexesOnLoad.withOverflowConfig(odbConfig) + val cpg = CpgLoader.loadFromOverflowDb(config) + CpgLoader.createIndexes(cpg) + cpg + } + + def runOssDataflow(cpg: Cpg): Unit = { + logger.info("Applying oss dataflow overlay...") + val context = new LayerCreatorContext(cpg) + val opts = new OssDataFlowOptions() + new OssDataFlow(opts).run(context) + } + + def exportCpg(configArgs: Args) : Unit = { + val cpgFilename = configArgs.loadCpg + logger.info(s"Load cpg from file: ${cpgFilename}") + val cpg = loadCpg(cpgFilename) + + if (cpg.graph.E.asScala.hasLabel("AST").count.next() == 0) { + logger.error("Loaded graph does not contain any AST edges; Exit") + sys.exit(1) + } + + val has_default_overlay = cpg.graph.E.asScala.hasLabel("CDG").count.next() != 0 + val has_oss_dataflow = cpg.graph.E.asScala.hasLabel("REACHING_DEF").count.next() != 0 + + if (configArgs.loadDefaultOverlays) { + if (!has_default_overlay) { + applyDefaultOverlays(cpg) + // creates edges: CDG, ALIAS_OF, CONTAINS, DOMINATE, EVAL_TYPE, SOURCEFILE, POST_DOMINATE, PARAMETER_LINK + } else { + logger.info("Graph seems to have default overlays already applied; Nothing to do") + } + } else { + logger.info("Default overlays will not be applied") + } + + if (configArgs.loadOssDataflowOverlay) { + if (!has_oss_dataflow) { + if (has_default_overlay) { + runOssDataflow(cpg) + // creates edges: REACHING_DEF + } else { + logger.warn("oss dataflow overlay depends on default overlays; skip oss dataflow overlay") + } + } else { + logger.info("Graph seems to have the oss dataflow overlay already applied; Nothing to do") + } + } else { + logger.info("oss dataflow overlay will not be applied") + } + + + // use gremlin to iterate edges and nodes + logger.info(s"Export graph to json file: ${configArgs.json.toString}") + val g = cpg.graph; + val nodes = g.V.asScala.toList.map(convertNode) + val edges = g.E.asScala.toList.map(convertEdge) + val m = Map("nodes" -> nodes, "edges" -> edges) + + val mapper = JsonMapper.builder() + .addModule(DefaultScalaModule) + .build() + mapper.registerModule(DefaultScalaModule) + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + + val out = new StringWriter + mapper.writerWithDefaultPrettyPrinter().writeValue(out, m) + val json = out.toString + new PrintWriter(configArgs.json) { write(json); close() } + + cpg.close() + } + + def main(args: Array[String]) : Unit = { + val builder = OParser.builder[Args] + val parser1 = { + import builder._ + OParser.sequence( + programName("joernCpgExport"), + opt[Unit]('d', "no-default-overlays") + .action((_, c) => c.copy(loadDefaultOverlays = false)) + .text("do not apply default overlays"), + opt[Unit]('o', "no-oss-dataflow") + .action((_, c) => c.copy(loadOssDataflowOverlay = false)) + .text("do not apply oss dataflow overlay"), + opt[File]('c', "cpg") + .valueName("") + .required() + .action((x, c) => c.copy(loadCpg = x)) + .text("load cpg from OverflowDB"), + opt[File]('j', "json") + .required() + .valueName("") + .action((x, c) => c.copy(json = x)) + .text("export cpg as json file"), + help("help") text("prints this usage text"), + ) + } + + OParser.parse(parser1, args, Args()) match { + case Some(config) => + exportCpg(config) + case _ => + sys.exit(1) + } + } +} \ No newline at end of file