Database security suite. Database proxy with field-level encryption, search through encrypted data, SQL injections prevention, intrusion detection, honeypots. Supports client-side and proxy-side ("transparent") encryption. SQL, NoSQL.

Acra: database security suite
Database protection suite with field level encryption and intrusion detection.


GitHub release Circle CI Coverage Status godoc
Server platforms Client platforms Install on DigitalOcean


| Acra Engineering Examples | Documentation | Installation | Examples and tutorials | | ---- | ---- | ---- | --- | --- |

What is Acra

Acra — database security suite for sensitive and personal data protection.

Acra provides field level encryption (client-side or proxy-side), multi-layered access control, database leakage prevention, and intrusion detection capabilities in a convenient, developer-friendly package. Acra was specifically designed for web and mobile apps with centralised data storage, including with distributed, microservice-rich applications.

Perfect Acra-compatible applications Typical industries
Web and mobile apps that store data in a centralised database or object storage
  • Healthcare
  • Finance
  • E-commerce
  • Critical infrastructures
  • Apps with > 1000 users
IoT apps that collect telemetry and process data in the cloud
High-load data processing apps

Acra gives you tools for encrypting the data records into special cryptographic containers, storing them in the database or file storage and then decrypting them in a secure compartmented area (separate virtual machine/container). Acra allows to encrypt data as early as possible and operate on encrypted data.

Acra's cryptographic design ensures that no secret (password, key, etc.) leaked from the application or database will be sufficient for decryption of the protected data chunks that originate from it. Acra minimises the leakage scope, detects unauthorised behavior, and prevents the leakage, informing operators of the incident underway.

This is Acra Community Edition, it's free for commercial and non-commercial use, forever.

User Acra suite for protecting data

Major security features

  • Cryptographic protection of data
  • field level encryption (client-side and/or proxy-side);
    each data record is encrypted using unique encryption keys
  • Selective encryption
  • select which field/columns to encrypt to balance good security and performance
  • Key management tools
  • built-in tools for key distribution, key rotation (with/without data re-encryption), and compartmentalisation
  • Trust compartmentalisation
  • datastore and application components can be compromised, yet the data stays protected
  • Prevention of SQL injections
  • through a built-in SQL firewall
  • Intrusion detection system
  • using poison records (honey tokens) to warn about suspicious behaviour
  • REST API (gRPC, HTTP)
  • encryption/decryption using AcraTranslator
  • Searchable encryption ᵉ
  • available for Acra Enterprise users
  • Masking / anonymization ᵉ
  • Tokenization / Pseudonymization ᵉ
  • Cryptographically protected audit log ᵉ
  • Acra delivers different layers of defense for different parts and stages of the data lifecycle. This is what defence in depth is – an independent set of security controls aimed at mitigating multiple risks in case of an attacker crossing the outer perimeter.

    Developer and DevOps friendly

  • Secure default settings
  • your infrastructure is secure from the start without additional configuring
  • Cryptography is hidden
    under the hood
  • no risk of selecting the wrong key length or algorithm padding
  • Automation-friendly
  • easy to configure and automate
  • Quick infrastructure integration
  • via binary packages or Docker images
  • Easy client-side integration
  • client-side encryption libraries support ~11 languages
  • Code-less client-side integration
  • available for server-side encryption in AcraServer's Transparent proxy mode
  • Logging, metrics, tracing
  • throughout all Acra components;
    compatible with ELK stack, Prometheus, Jaeger
  • No vendor lock
  • rollback utilities to decrypt database into plaintext
  • Demos, examples, simulators
  • numerous web-based and Docker-based example projects available
  • DigitalOcean Acra 1-Click App
  • run AcraServer in your DigitalOcean cloud
  • Managed solution available
  • we can setup and manage Acra for you

    Cryptography

    Acra relies on our cryptographic library Themis, which implements high-level cryptosystems based on the best available open-source implementations of the most reliable ciphers. Acra strictly doesn't contain self-made cryptographic primitives or obscure ciphers. To deliver its unique guarantees, Acra relies on the combination of well-known ciphers and smart key management scheme.

    Default crypto-primitive source OpenSSL
    Supported crypto-primitive sources ᵉ BoringSSL, LibreSSL, FIPS-compliant, GOST-compliant, HSM
    Storage encryption AES-256-GCM + ECDH
    Transport encryption TLS v1.2+ / Themis Secure Session
    KMS integration ᵉ Amazon KMS, Google Cloud Platform KMS, Hashicorp Vault, Keywhiz

    ᵉ — available in the Enterprise version of Acra only. Drop us an email to get a full list of features and a quote.

    Try Acra without writing code

    How does Acra work?

    To better understand the architecture and data flow in Acra, please refer to the Architecture and data flow section in the documentation.

    Protecting data in SQL databases using AcraServer

    AcraServer works as transparent encryption/decryption proxy with SQL databases. Depending on your app architecture, it's possible to use client-side encryption or server-side encryption, or both simultaneously.

    Integrating client-side encryption using AcraWriter

    Client-side encryption using AcraServer and AcraWriter

    The typical infrastructure with AcraConnector and AcraServer, data is encrypted on the client side (web backend or mobile app) using AcraWriter, decrypted on the AcraServer side, that works as transparent database proxy.

    Client-side encryption using AcraServer and AcraWriter

    The dataflow of encrypted and plaintext data. Note: it's possible to write encrypted data directly to the database, omitting the AcraServer.

    This is what the process of encryption and decryption of data in a database looks like:

    • Your application encrypts some data through AcraWriter by generating an AcraStruct using Acra storage public key and then updates the database. AcraStructs generated by AcraWriter can't be decrypted by it — only the Acra's server side has the keys for decryption.
    • To retrieve the decrypted data, your application talks to AcraServer. It is a server-side service that works as a database proxy: it transparently sits between your application and the database and silently listens to all the traffic coming to and from the database.
    • AcraServer monitors the incoming SQL requests and blocks the unwanted ones using the built-in configurable SQL firewall called AcraCensor. AcraServer only sends allowed requests to the database. Certain configurations for AcraServer can be adjusted remotely using AcraWebConfig web server.
    • Upon receiving the database response, AcraServer tries to detect AcraStructs, decrypts them, and returns the decrypted data to the application.
    • AcraConnector is a client-side daemon responsible for providing encrypted and authenticated connection between the application and AcraServer. AcraConnector runs under a separate user/in a separate container and acts as middleware. AcraConnector accepts connections from the application, adds an extra transport encryption layer using TLS or Themis Secure Session, sends the data to AcraServer, receives the result, and sends it back to the application.

    Integrating proxy-side encryption using AcraServer in Transparent proxy mode

    Server-side encryption using AcraServer

    The typical infrastructure with AcraConnector and AcraServer, data is encrypted and decrypted by AcraServer, that works as transparent database proxy.

    Server-side encryption using AcraServer

    The dataflow of encrypted and plaintext data, AcraServer it encrypts and decrypts data.

    Transparent proxy mode allows you to configure AcraServer to encrypt records in specific database columns without altering the application code. Basically, AcraServer here performs AcraWriter's duties.

    This mode is useful for large distributed applications, where separate updating of the source code for each client app is complicated.

    • Imagine that the client application wants to update some data in the database. The application logic doesn't need to change because there's no need to integrate AcraWriter library into the application code. The application sends SQL requests with plaintext data through AcraConnector and AcraServer to the database, as described above. There's a secure transport layer between AcraConnector and AcraServer (via TLS or Themis Secure Session), so data from client app is transmitted via a secure channel.
    • On receiving SQL queries, AcraServer parses each query and encrypts the desired values into AcraStructs. To know which values to encrypt, AcraServer uses a special configuration file (known as encryptor_config_file) that describes which columns in which tables should be encrypted. AcraServer uses AcraStruct encryption key just as AcraWriter would.
    • After encrypting the values into AcraStructs, AcraServer passes the modified queries to the database and the database response – back to the client application via AcraConnector.
    • When the client application wants to read the data, it sends a read query to the database (via AcraConnector and AcraServer). Upon retrieving the database response, AcraServer tries to detect AcraStructs, decrypts them, and returns the decrypted data to the application.

    Transparent mode has the same features as the "usual" mode – including SQL firewall, intrusion detection based on poison records, Zone support, etc.

    Check out the detailed documentation on using and configuring the Transparent proxy mode.

    Protecting data in any file storage using AcraWriter and AcraTranslator

    Client-side encryption and standalone decryption using AcraTranslator

    The typical infrastructure with AcraConnector and AcraTranslator, data is encrypted on the client side (web backend or mobile app) using AcraWriter, decrypted on the AcraTranslator side, that works as standalone decryption service.

    Acra Translator: simplified architecture

    The dataflow of encrypted and plaintext data, AcraTranslator only decrypts data on demand.

    In some use cases, the application can store encrypted data as separate blobs (in NoSQL databases, or as files that are not in a database, i.e. in a S3 bucket, local file storage, etc.). In this case, you can use AcraTranslator — a lightweight server that receives AcraStructs and returns the decrypted data.

    Note: since Q3 2020, AcraTranslator can both encrypt and decrypt data via REST API (HTTP, gRPC). You may use a combination of AcraWriter+AcraTranslator for client-side encryption and Translator-side decryption; or AcraTranslator only for both encryption and decryption without changing app code.

    This is what the process of encryption and decryption of data using AcraTranslator looks like:

    • Your application encrypts some data using AcraWriter, generating an AcraStruct using Acra storage public key and puts the data into any file storage. AcraStructs generated by AcraWriter can't be decrypted by it — only the Acra's server side has the right keys for decrypting it. Otherwise, you might decide not to use AcraWriter, but use AcraTranslator for encrypting data – application sends plaintext, AcraTranslator returns AcraStructs.
    • To decrypt an AcraStruct, your application sends it to AcraTranslator as a binary blob via HTTP or gRPC API. AcraTranslator doesn’t care about the source of the data, it is responsible for holding all the secrets required for data decryption and for actually decrypting the data.
    • AcraTranslator decrypts AcraStructs and returns the decrypted data to the application.
    • To avoid sending plaintext via an unsecured channel, AcraTranslator requires the use of AcraConnector, a client-side daemon responsible for providing encrypted and authenticated connection between the application and AcraServer. AcraConnector runs under a separate user/in a separate container and acts as middleware. It accepts connections from the application, adds transport encryption layer using TLS or Themis Secure Session, sends data to AcraServer, receives the result, and sends it back to the application.

    AcraTranslator and AcraServer are fully independent server-side components and can be used together or separately depending on your infrastructure.

    Availability

    Client-side

    AcraWriter is a client-side library that encrypts data into a special binary format called AcraStruct. AcraWriter is available for Ruby, Python, Go, C++, Node.js, iOS, Android/Java and PHP, but you can easily generate AcraStruct containers with Themis for any platform you want.

    AcraWriter is required only for the client-side encryption dataflow. If you use AcraServer in Transparent encryption mode, or use AcraTranslator for both encryption and decryption, you don't need AcraWriter at all.

    Client platform Documentation and guides Examples Package manager
    🐹 Go Installation guide examples/golang
    🐍 Python Installation guide examples/python PyPI
    ♦️ Ruby Installation guide examples/ruby Gem
    C++ Installation guide examples/cpp
    📱 iOS (Swift / Objective-C) Installation guide examples/objc CocoaPods
    ☎️ Android (Java / Kotlin) Installation guide examples/android_java maven
    🐘 PHP Installation guide examples/php
    🍭 Node.js Installation guide examples/nodejs npm

    Server-side

    The Server-side Acra components (AcraServer, AcraTranslator) should run as separate services/servers/VMs. Key management utils and database helpers are usually run on the same server as AcraServer/AcraTranslator.

    Install Server-side Acra components:

    Distributive Instruction set Download package or alternatively
    CentOS 7 x86_64 rpm package use Docker or
    build from source
    Debian Stretch (9)
    Debian Jessie (8)
    x86_64/i386 deb package
    Ubuntu Bionic (18.04) x86_64 deb package
    Ubuntu Artful (17.10)
    Ubuntu Xenial (16.04)
    x86_64/i386 deb package
    macOS (10.12 - 10.14) x86_64 -

    Note: the server-side Acra components are not compatible with Windows OS as host OS, consider using Docker.

    Compatibility and integration

    AcraServer is a server-side service that works as database proxy: it sits transparently between your application and the database, listens silently to all the traffic that's coming to and from the database. AcraTranslator is database-agnostic: it provides HTTP and gRPC API to decrypt AcraStructs stored anywhere.

    Acra is compatible with numerous RDBMS, object and KV stores, cloud platforms, external key management systems (KMS), load balancing systems.

    Cloud platforms DigitalOcean, AWS, GCP, Heroku
    RDBMS MySQL v5.7+, PosgtreSQL v9.4-v11, MariaDB v10.3
    Google Cloud SQL, Amazon RDS
    Object stores filesystems, KV databases, Amazon S3, Google Cloud DataStore
    Load balancing HAProxy, cloud balancers

    Open source Acra has limited integration support, more services are available in the Enterprise version of Acra only.

    Installation and launch

    Quick try (run example apps)

    Acra Example Projects illustrate the integration of Acra data protection suite into existing applications: web applications based on Django and Ruby on Rails frameworks, and simple CLI applications. We took well-known apps, detected sensitive data there and added the encryption layer. Protecting the data is completely transparent for the users and requires minimal changes in the infrastructure and application code.

    Developers and Ops friendly:

    • run a single command to deploy the application, database, Acra's components, logs, and dashboards;
    • read the code changes and see how little it takes to integrate encryption into the client application;
    • learn how Acra works by reading logs, monitoring metrics in Prometheus, checking tracers in Jaeger and watching Grafana dashboards;
    • inspect Docker-compose files, architecture schemes, database tables, and much more.

    Requirements: Linux or macOS with installed Docker.

    ⚙️ Run Acra Example Projects ⚙️

    Quick integration into your infrastructure

    For a quick and easy integration of Acra into your own infrastructure, we recommend trying Acra with Docker first. Using only two commands, you will get all the Acra's components and database up and running, with a secure transport layer between them. We prepared several typical infrastructure variants to experiment with.

    • Select one appropriate use case from the pre-made configurations ("Compose files"): use AcraServer-based configuration to protect the data in a database or select AcraTranslator to protect the files or any other binary blob stored elsewhere.
    • Launch Acra's server-side by running the selected Docker-compose file: it will generate the appropriate keys, put them into correct folders, perform a public key exchange, run selected services and database, and then it will listen to the incoming connections.
    • Integrate AcraWriter into your application code where you need to protect the sensitive data, supply AcraWriter with an Acra storage public key (generated by Docker-compose on the previous step). Encrypt the data into AcraStructs and send them into the database or file storage.
    • Decrypt data by reading the database through AcraServer or by decrypting the files through AcraTranslator.

    Please use the Acra Docker demo stand for testing/experimenting purposes only as the encryption keys are pre-generated in the configuration.

    Normal integration into your infrastructure

    For production environments, we insist on generating and exchanging keys manually and deploying Acra as Docker containers or from source code. Refer to the Quick Start guide to understand how to download and launch Acra components, generate keys, and perform the key exchange properly.

    Documentation, tutorials, additional information

    The most recent versions of the documentation, tutorials, and demos for Acra are available on the official Cossack Labs Documentation Server. The Github Wiki documentation is deprecated and is no longer updated since v0.82.0.

    To gain an initial understanding of Acra, you might want to:

    You can also check out the speaker slides for the following talks by Cossack Labs engineers:

    Demo projects

    Client-side encryption mode Transparent encryption mode

    AcraCensor: SQL firewall to prevent SQL injections

    AcraCensor example application illustrates how to use AcraCensor as SQL firewall to prevent SQL injections. The target application is a well-known vulnerable web application OWASP Mutillidae 2.

    The demo project has a Docker-compose file that runs the following web infrastructure:

    • OWASP Mutillidae web application,
    • Acra encryption suite.

    Acra works as a proxy between web and database. AcraCensor inspects every SQL query that runs from the web application to the database, and back, and blocks suspicious queries.

    Watch the video

    Requirements: Linux or macOS with installed Docker.

    ⚙️ Run AcraCensor SQL firewall example ⚙️

    Poison records: intrusion detection example

    Intrusion detection example application illustrates how to use poison records (honey tokens) as "intrusion markers" that warn about possible attack.

    Requirements: Linux or macOS with installed Docker.

    🍯 Run intrusion detection example 🐝

    Acra Load Balancing Example

    Acra load balancing example application illustrates building high availability and balanced infrastructure, based on Acra components, PostgreSQL, and Python web application. We prepared several configurations with multiple databases and HAProxy.

    🔛 Run Acra Load Balancing Example 🔛

    GDPR, HIPAA, CCPA

    Acra can help you comply with the current privacy regulations, such as:

    Configuring and using Acra in a designated form will cover most of the demands described in articles 25, 32, 33, and 34 of GDPR and the PII data protection demands of HIPAA. Read more about Acra and GDPR compliance here.

    Open source vs Pro vs Enterprise

    This is Acra Community Edition, the open source version of Acra, which is 💯 free for commercial and non-commercial usage. Please let us know in the Issues if you stumble upon a bug, see a possible enhancement, or have a comment on security design.

    There are also Pro and Enterprise versions of Acra available. Those versions provide better performance, redundancy/load balancing, come pre-configured with crypto-primitives of your choice (FIPS, GOST), have integration with key/secret management tools in your stack, provide unique security features like search through encrypted data, and have plenty of utils and tools for your Ops and SREs to operate Acra conveniently – deployment automation, scaling, monitoring, and logging. Talk to us to get full feature lists and a quote.

    Security consulting

    It takes more than just getting cryptographic code to compile to secure the sensitive data. Acra won't make you “compliant out of the box” with all the modern security regulations, and no other tool will.

    We help companies plan their data security strategy by auditing, assessing data flow, and classifying the data, enumerating the risks. We do the hardest, least-attended part of reaching the compliance – turning it from the “cost of doing business” into the “security framework that prevents risks”.

    Contributing to us

    If you’d like to contribute your code or provide any other kind of input to Acra, you’re very welcome. Your starting point for contributing is here.

    License

    Acra is licensed as Apache 2 open-source software.

    Contacts

    If you want to ask a technical question, feel free to raise an Issue or write to [email protected].

    To talk to the business wing of Cossack Labs Limited, drop us an email to [email protected].

    Blog Twitter CossackLabs Medium CossackLabs

    Owner
    Cossack Labs
    convenient cryptographic tools where you need them
    Cossack Labs
    Comments
    • Support for AcraServer integration with Patroni HA

      Support for AcraServer integration with Patroni HA

      Hey folks, feature request/question here.

      We are currently using patroni as an HA solution for PostgreSQL and want to use Acra as an encryption/decryption DB proxy for on-the-fly transparent data encryption.

      In Patroni, a. HAproxy connects with multiple postgres nodes, based on a leader-replica architecture using raft.

      Is it possible to integrate AcraServer over the same patroni's HAProxy, so that we can introduce AcraServer without sacrificing our DB's latency instead of a separate AcraServer instance?

    • Adding data type to encrypted column in AcraServer encryption configuration

      Adding data type to encrypted column in AcraServer encryption configuration

      issues:

      In the documentation, this is mentioned :

      Transparent encryption proxy mode allows you to configure AcraServer to encrypt records in specific database columns without altering the application code.
      

      However, There is not possibility for my not editable application to work with this proxy as :

      Encrypted data is binary data. As AcraServer doesn't know the nature of data, it returns the decrypted binary data to the web app. You’ll need to change the source code of your web app for the app to expect the decrypted data as binary, then to encode it into the original format (strings, numbers, bytes, etc.).
      

      Expected behaviour :

      As a transparent proxy user , I expect to have to define the database field type either in the acra server/connector configuration and in the database (change encrypted field into binary field) but not in the application code.

      Regards,

    • AcraServer 0.93 + PostgreSQL |

      AcraServer 0.93 + PostgreSQL | "Panic in connection processing"

      Hello, I have been testing Acra Server 0.92.0 with an application. Version 0.92.0 seems to be working fine. I then realized I needed some features present in the 0.93.0 release but after updating I can't no longer run my application with acra.

      To Reproduce

      • Set up acra server 0.92.0 with my application
      • Updated Acra server from 0.92.0 to 0.93.0
      • Application no longer works with acra server

      Expected behavior Application should work as before

      Acra configuration files

      --client_id="test"
      --db_host=postgres
      --keys_dir=/keys
      --tls_auth=0
      --tls_client_id_from_cert=false
      --postgresql_enable=true
      -d
      

      Environment (please complete the following information):

      • Acra version: 0.93.0
      • Database server and its version: PostgreSQL 9.6.10
      • Installed components:
        • [x] AcraServer
      • Data-in-transit encryption between Acra and the client-side application:
        • [x] no transport encryption
      • Installation way:
        • [x] via Docker

      Additional context Acra server debug logs when the application crashes

      time="2022-09-01T14:04:32Z" level=debug msg="New query" client_id=test prepared_name=S_4 proxy=client session_id=1 sql=begin
      time="2022-09-01T14:04:32Z" level=debug msg="Registered new prepared statement" client_id=test prepared_name=S_4 proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg=GetBindData client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Bind packet" client_id=test portal="" proxy=client session_id=1 statement=S_4
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg=GetExecuteData client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg=GetParseData client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="New query" client_id=test prepared_name=S_5 proxy=client session_id=1 sql="insert into blue_FDZ_CONFIGURATION(\"key\", value) values ($1, $2)"
      time="2022-09-01T14:04:32Z" level=debug msg="Hasn't schema for table blue_FDZ_CONFIGURATION"
      time="2022-09-01T14:04:32Z" level=debug msg="Registered new prepared statement" client_id=test prepared_name=S_5 proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data length" client_id=test proxy=server session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=server session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg=ParseComplete parse="&{[83 95 53 0] [73 78 83 69 82 84 32 73 78 84 79 32 34 98 108 117 101 95 70 68 90 95 67 79 78 70 73 71 85 82 65 84 73 79 78 34 32 40 34 107 101 121 34 44 32 34 118 97 108 117 101 34 41 32 86 65 76 85 69 83 32 40 36 49 44 32 36 50 41 0] [0 2] [[0 0 4 19] [0 0 4 19]]}"
      time="2022-09-01T14:04:32Z" level=debug msg="Read packet" client_id=test proxy=server session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data length" client_id=test proxy=server session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Read data" client_id=test proxy=server session_id=1
      time="2022-09-01T14:04:32Z" level=error msg="Panic in connection processing, close connection" client_id=test error="runtime error: invalid memory address or nil pointer dereference" function=ProxyDatabaseConnection session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Close acra-connector connection" client_id=test session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Can't read first 5 bytes" client_id=test code=588 error="read tcp 172.30.0.8:9393->172.30.0.9:56294: use of closed network connection" proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Can't read packet from client to database" client_id=test error="read tcp 172.30.0.8:9393->172.30.0.9:56294: use of closed network connection" proxy=client session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Stop to proxy" client_id=test interrupt_side=Client-AcraServer session_id=1
      time="2022-09-01T14:04:32Z" level=error msg="Network error" client_id=test code=1100 error="read tcp 172.30.0.8:9393->172.30.0.9:56294: use of closed network connection" interrupt_side=Client-AcraServer session_id=1
      time="2022-09-01T14:04:32Z" level=info msg="Closing client's connection" client_id=test interrupt_side=Client-AcraServer session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Close acra-connector connection" client_id=test session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Close db connection" client_id=test session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="Close db connection" client_id=test session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="All connections closed" client_id=test session_id=1
      time="2022-09-01T14:04:32Z" level=debug msg="All connections closed" client_id=test session_id=1
      time="2022-09-01T14:04:33Z" level=debug msg="Can't read first 5 bytes" client_id=test code=588 error=EOF proxy=client session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Can't read packet from client to database" client_id=test error=EOF proxy=client session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Stop to proxy" client_id=test interrupt_side=Client-AcraServer session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="EOF connection closed" client_id=test interrupt_side=Client-AcraServer session_id=2
      time="2022-09-01T14:04:33Z" level=info msg="Closing client's connection" client_id=test interrupt_side=Client-AcraServer session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Close acra-connector connection" client_id=test session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Close db connection" client_id=test session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Can't read packet" client_id=test code=588 error="read tcp 172.30.0.8:35104->172.30.0.4:5432: use of closed network connection" proxy=server session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="All connections closed" client_id=test session_id=2
      time="2022-09-01T14:04:33Z" level=debug msg="Second proxy goroutine stopped" client_id=test error="AcraServer-Database:read tcp 172.30.0.8:35104->172.30.0.4:5432: use of closed network connection" interrupt_side=Client-AcraServer session_id=2
      time="2022-09-01T14:04:33Z" level=info msg="Finished processing client's connection" client_id=test interrupt_side=Client-AcraServer session_id=2
      

      Also tried to run different commits of release 0.93.0 and this starts to happen after commit 29eb6ffb20ecbefd2f7f1684ec16666c1ab6169a

    • Add new linters to Acra CircleCI configuration

      Add new linters to Acra CircleCI configuration

      • Fix golint not being installed in prepare.sh and thus not reporting issues
      • Add misspell linter to detect common misspells
      • Add ineffassign linter to detect ineffectual assignments (assigned but not used or unintentionally assigned to wrong var because of how scopes and := work in Go)
      • Make all these linters write output to console, so we'll see what the issues are by looking at CI log

      I'm still unsure whether it's good idea to allow 10 ineffassign issues. There are currently 3, and those are intentional = nil assignments. Like, we won't see them until we reach 10, but then we won't be able to merge PR because CircleCI tells us there're too many issues

    • Question about Searchable Encryption

      Question about Searchable Encryption

      Hi,

      I am looking for a tutorial that's gonna make me test your searchable encryption part of software but the one in the examples is empty and "coming soon".

      I have read the provided guide anyway and I cannot find the "encryptor_config_file" in the acra engineering demo. How I do?

      Cheers.

    • TLS authentication with certificates as identifiers

      TLS authentication with certificates as identifiers

      Extended current TLS authentication where acra may starts with specified from cli params client_id which used for all incoming connections. This PR extends it and allow to start acra without static client_id and use data from certificates to map them to keystore identifiers/keys. PR contains 2 implementations of extracting data from certificates: common name and serial numbers, which should be chosen at startup (cli params not added yet). And one implementation of converting these values to acceptable format of ids using hex encoder (to allow non ascii printable values like serial numbers) and hash function (to allow values which longer than 256 length). A little bit refactored unit-tests to re-use same common function which verify wrapper's logic, added helpers to generate tls certificates in golang to test all specific cases related to certificate fields (@iamnotacake you can re-use them if need^)

      Done:

      • validation incoming certificate (deny CA certificates or with incorrect keyUsage/extKeyUsage values)
      • identifier fetching from certificates (distinguished name, serial numbers)
      • encoding identifier values to acceptable formats of clientID by sha512 and hex encoding

      Now AcraServer can use certificates from acra-connector connections when used tls_client_id_from_cert + acraconnector_tls_transport_enable, or from app's connection when used tls_client_id_from_cert + acraconnector_transport_encryption_disable. In both cases should be configured all necessary TLS params with ca/cert/key values. Plus user can configure which strategy of mapping certificate metadata to clientID to use. To configure should set tls_identifier_extractor_type with distinguished_name or serial_number value. In first case will be used "Subject" field ordered and formatted according to RFC2253, hashed with sha512 (as hash function which provide longest digest and least collision probability) and encoded to hex value. In second cases will be used serial number as 20-bytes integer value in big-endian order hashed with same function sha512 and encoded to hex value. First strategy good to use when certificates may be rotated and allow to avoid rotation keys and accordingly data too. Second strategy good for environments when Subject field not used in certificates.

    • AcraTranslator refactoring: service start up and shutdown, signals listener

      AcraTranslator refactoring: service start up and shutdown, signals listener

      This PR introduces several updates for our AcraTranslator service.

      In general I refactored main component (ReaderServer) and added support of SIGHUP handling to the service. What is refactored:

      • Added new StartFromFileDescriptor function that allows to run HTTP and gRPC servers having listener obtained from correspondent descriptor, instead of creating a new ones in order to preserve current listeners in new process;
      • Splitted monster Start function on lower components startHTTP, startGRPC in order to improve readability;
      • Wrapped Start and StartFromFileDescriptor with timeout exit (single point) and avoiding hidden os.Exit calls. This is extremely important for EE version that relies on CE ReaderServer component;
      • Moved from 'multiply listeners - multiply connections' to 'single listener - multiply connection' with transparent management of stopping/closing it. This is also important for better controlling of code execution;
      • Added some getters which is needed by EE version.

      There are two questions about previous implementation that were not obvious for me (most likely they are addressed to @Lagovas), and probably we can discuss it while review process: 1) why previously we had 'multiply listeners - multiply connection' model (when we called HandleClientConnection, it was a AcceptConnection function inside that created internally new listener and returned accepted connection via channel, their closing was managed via child contexts cancelling in separate goroutine) if listener itself allows calling Accept function safely from multiply goroutines; and 2) why does switching to new process works, if file descriptors created while SIGHUP processing and on service starting are different? (I asked @Lagovas about it and we came to the point that we know order number of Acra descriptor - it's 3, but it seems that we need not the order number but correct actual value of fd to start)

      How did I test this? Manually. I created a following methodology for testing it (locally run AcraTranslator, AcraConnector and 2 toy applications: one for sending HTTP and second - for gRPC requests):

      1. Test HTTP component without/with active connections;
      2. Test gRPC component without/with active connections;
      3. Test HTTP + gRPC components that run simultaneously without/with active connections;

      For sending HTTP requests I used the following piece of code (thanks to our documentation - but some examples are outdated there):

      for run in {1..100}; 
      do curl -X POST --data-binary @client.acrastruct --header "Content-Type: application/octet-stream" http://127.0.0.1:8000/v1/decrypt; 
      done
      

      For sending gRPC requests I used following go code:

      conn, err := grpc.Dial("127.0.0.1:8001", grpc.WithInsecure())
      	if err != nil {
      		t.Fatal(err)
      	}
      	defer conn.Close()
      
      
      	client := grpc1.NewReaderClient(conn)
      
      	for start := time.Now(); time.Since(start) < time.Second * 10; {
      		_, _ = client.Decrypt(context.Background(),
      			&grpc1.DecryptRequest{
      				ClientId:   []byte("testclientid"),
      				ZoneId:     []byte("test_zone"),
      				Acrastruct: []byte("blabla"),
      			},
      			grpc.EmptyCallOption{})
      	}
      

      While those applications were running, I sent (multiply times) SIGHUP signal to the AcraTranslator and observed that service restarted and there were no cut connections. Testing without connections are rather straightforward.

    • Questions on Acra, python and TLS

      Questions on Acra, python and TLS

      Hi,

      I am having problems with latest release of Acra and I don't understand how to troubleshoot that problem. Print is working (empty) but I cannot submit the data into the database with python examples. I am using Ubuntu 20.04.4 LTS.

      Error output: (I cannot bold/code style it so I will make "----" where code starts and where ends)


      ubuntu@Gallardo:~/acra$ python3 examples/python/example_without_zone.py --public_key=docker/.acrakeys/acra-server/1ec6f16c36e6a3f1a064d708cba5b1ca760ba5ae29d3d80aab67b043ca641255c21ddf8f0fb09a8de336d555b4b961953200c7125f745cff7ed577f7c4b555c4_storage.pub --db_user=${POSTGRES_USER} --db_password=${POSTGRES_PASSWORD} --host=127.0.0.1 --port=5432 --data="data1" insert data: data1 Traceback (most recent call last): File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1719, in _execute_context context = constructor( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1091, in _init_compiled param = { File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1092, in key: processorskey File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/sql/type_api.py", line 1631, in process return impl_processor(process_param(value, dialect)) File "/home/ubuntu/.local/lib/python3.8/site-packages/acrawriter/sqlalchemy/init.py", line 31, in process_bind_param return create_acrastruct(value, self._public_key) File "/home/ubuntu/.local/lib/python3.8/site-packages/acrawriter/init.py", line 40, in create_acrastruct random_kp = GenerateKeyPair(KEY_PAIR_TYPE.EC) File "/home/ubuntu/.local/lib/python3.8/site-packages/pythemis/skeygen.py", line 42, in init if themis.themis_gen_ec_key_pair( File "/usr/lib/python3.8/ctypes/init.py", line 386, in getattr func = self.getitem(name) File "/usr/lib/python3.8/ctypes/init.py", line 391, in getitem func = self._FuncPtr((name_or_ordinal, self)) AttributeError: python3: undefined symbol: themis_gen_ec_key_pair

      The above exception was the direct cause of the following exception:

      Traceback (most recent call last): File "examples/python/example_without_zone.py", line 73, in write_data(args.data, connection) File "examples/python/example_without_zone.py", line 33, in write_data connection.execute( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1306, in execute return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS) File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection return connection._execute_clauseelement( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1498, in _execute_clauseelement ret = self._execute_context( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1725, in _execute_context self.handle_dbapi_exception( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2043, in handle_dbapi_exception util.raise( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise raise exception File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1719, in _execute_context context = constructor( File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1091, in _init_compiled param = { File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 1092, in key: processorskey File "/home/ubuntu/.local/lib/python3.8/site-packages/sqlalchemy/sql/type_api.py", line 1631, in process return impl_processor(process_param(value, dialect)) File "/home/ubuntu/.local/lib/python3.8/site-packages/acrawriter/sqlalchemy/init.py", line 31, in process_bind_param return create_acrastruct(value, self._public_key) File "/home/ubuntu/.local/lib/python3.8/site-packages/acrawriter/init.py", line 40, in create_acrastruct random_kp = GenerateKeyPair(KEY_PAIR_TYPE.EC) File "/home/ubuntu/.local/lib/python3.8/site-packages/pythemis/skeygen.py", line 42, in init if themis.themis_gen_ec_key_pair( File "/usr/lib/python3.8/ctypes/init.py", line 386, in getattr func = self.getitem(name) File "/usr/lib/python3.8/ctypes/init.py", line 391, in getitem func = self._FuncPtr((name_or_ordinal, self)) sqlalchemy.exc.StatementError: (builtins.AttributeError) python3: undefined symbol: themis_gen_ec_key_pair [SQL: INSERT INTO test_example_without_zone (data, raw_data) VALUES (%(data)s, %(raw_data)s) RETURNING test_example_without_zone.id] [parameters: [{'data': b'data1', 'raw_data': 'data1'}]]


      File used with command source to set environment variables both in Docker compose starting window and the example one:

      export ACRA_SERVER_MASTER_KEY=$(echo -n "6EaxBnRwcNZnNyExInkrY0hC6Ahxz5pS" | base64) export ACRA_CONNECTOR_MASTER_KEY=$(echo -n "oPZktQOFIHuyOc65fnoBnh8wWFdixJly" | base64) export ACRA_CLIENT_ID="Testbed" export POSTGRES_DB="test" export POSTGRES_USER="test" export POSTGRES_PASSWORD="test" export MYSQL_ONETIME_PASSWORD="test" export MYSQL_ROOT_PASSWORD="test" export MYSQL_DATABASE="test" export MYSQL_USER="test" export MYSQL_PASSWORD="test" export ACRA_HTTPAUTH_USER=test export ACRA_HTTPAUTH_PASSWORD=test

      I hope someone can help me to carry out this problem, Cheers.

    • Error with a golang dependency when using Go 1.10

      Error with a golang dependency when using Go 1.10

      Hello, I'm trying to build Acra from sources but I'm failing at the first step of the guide which is to install acra-keymaker.

      This is the error I get when I run go get github.com/cossacklabs/acra/cmd/acra-keymaker

      ubuntu@ip-10-1-1-1:~/work/src/go.opencensus.io$ go get github.com/cossacklabs/acra/cmd/acra-keymaker
      package go.opencensus.io/exporter/jaeger: cannot find package "go.opencensus.io/exporter/jaeger" in any of:
              /usr/lib/go-1.10/src/go.opencensus.io/exporter/jaeger (from $GOROOT)
              /home/ubuntu/work/src/go.opencensus.io/exporter/jaeger (from $GOPATH)
      
      

      This got resolved when I downgraded go.opencensus.io/ from latest to v0.19.x because the package jaeger is moved to contrib.go.opencensus.io

    • Don't escape space characters in strings

      Don't escape space characters in strings

      Found that valid strings with \n characters for string types we encode as hex values and then it rendered incorrectly in web apps. In this PR update our check of printable characters that skipped for encoding. Also found that postgresql sends unicode values in another way then simple latin strings (with encoding into hex). But I didn't find how to fix it correctly, so I created T2531 for futher investigations. And this PR just short fix that should fix obvious and frequent cases.

      Checklist

    • Separate TLS config for AcraConnector and DB

      Separate TLS config for AcraConnector and DB

      Currently AcraServer uses only one TLS configuration for everything. This means, in particular, that both AcraConnector and DB are expected to use the same private CA, if root certificates are not available in the system certificate store. This is not always the case, and it would be nice to allow separate TLS configurations.

      This PR adds several new options:

      | New option | Old option | Purpose | | -- | -- | -- | | tls_client_ca | tls_ca | path to CAfile with trusted root certificates for AcraConnector verification | | tls_client_cert | tls_cert | path to server certificate presented to AcraConnectors | | tls_client_key | tls_key | path to private key to the certificate above | | tls_client_auth | tls_auth | TLS authentication level when accepting AcraConnector connections |

      | New option | Old option | Purpose | | -- | -- | -- | | tls_database_ca | tls_ca | path to CAfile with trusted root certificates for database verification | | tls_database_cert | tls_cert | path to client certificate used when connecting to database | | tls_database_key | tls_key | path to private key to the certificate above | | tls_database_auth | tls_auth | TLS authentication level when connecting to database | | tls_database_sni | tls_db_sni | server name expected when connecting to database (renamed option) |

      New options override old options. The old options still remains not deprecated, they might be useful as a shortcut.

      This required a refactoring to split the TLS configuration, ~~so in the future it will be possible to have more specific configuration (think, different allowed authentication modes, cryptosuites, TLS versions, etc.)~~ which allowed to easily split the configuration.

      There are no integration tests for this option currently. (Do we need them?) I have tested it manually, with recently updated certificates. The timing could not have been better...

    • Split integration tests

      Split integration tests

      The idea of that PR is to split test.py file into pieces as now it's difficult to work with that file. IDEA needs more time to index the file, plus its more difficult to find the class/mixing you need.

      What have been made in this PR:

      • move all encryptor config files from tests/* to tests/encryptor_configs folder.
      • split test.py into several subfiles with tests:
        • base.py contains all general classes/constants/mixings etc
        • searchable_transparent_encryption.py contains base mixing for searchable/transparent encryption tests and their related tests;
        • tokenization.py - contains base mixing for tokenization/masking tests and their related tests;
        • type_aware.py - contains all tests related to TA
        • integrations.py - contains all tests with integrations (AWS, Vault, Consul, etc)

      test.py has less than 5k of codes now and contains general tests unrelated to the previously described. The idea was to save test.py file as the main file, not to change the CI running scripts.

      Currently, PR is in a draft state, as some test files can be added and structure can be changed.

      Checklist

    • [ISSUE] tls_ocsp_from_cert: ignore doesn't ignore database OCSP, undocumented behaviour

      [ISSUE] tls_ocsp_from_cert: ignore doesn't ignore database OCSP, undocumented behaviour

      Describe the bug

      A clear and concise description of what the bug is.

      The configuration value tls_ocsp_from_cert: ignore is not working correctly with the database connection. To get the expected behaviour, I had to use an undocumented setting tls_ocsp_database_from_cert: ignore which I guessed from reading the code, not the docs.

      My expectation would be for it to be documented here: https://docs.cossacklabs.com/acra/configuring-maintaining/tls/ocsp/

      I'm aware of the implications of switching off all these TLS settings and using the same certificate & key for client & server - honestly, I am just trying to get it to work with Python and the asyncpg library, with Cockroach Labs serverless DB which seems to not have OCSP set up as Acra expects it to be (separate bug? I don't know yet.)

      To Reproduce My YAML configuration (db_host is censored):

      # acra.yml - both encryptor and server config in one file because they don't seem to step on each other.
      version: 0.94.0
      
      schemas:
        - table: tbl_auditlog
          columns:
            - dc_entry_id
            - dc_guild
            - stamp
          encrypted:
            - column: dc_user
              searchable: true
            - column: dc_target
              searchable: true
            - column: py_auditlogentry
      
        - table: t_bot_settings
          columns:
            - ky
          encrypted:
            - column: dc_user
              searchable: true
            - column: json_val
      
      postgresql_enable: true
      db_host: "example.cluster.cockroachlabs.cloud"
      db_port: 26257
      
      keystore_cache_size: -1
      keystore_cache_on_start_enable: false
      tls_key: "./keys/opensslKey.key"
      tls_cert: "./keys/opensslCertificate.crt"
      tls_auth: 0
      tls_client_id_from_cert: false
      tls_ocsp_required: allowUnknown
      tls_ocsp_from_cert: ignore
      #tls_ocsp_database_from_cert: ignore
      tls_crl_from_cert: ignore
      tls_crl_database_from_cert: ignore
      #tls_ocsp_url: ""
      #tls_ocsp_client_url: ""
      #tls_ocsp_database_url: "http://r3.o.lencr.org/ocsp"
      

      My acra-server command: acra-server --config_file=./acra.yml --client_id=dev_acra_client --encryptor_config_storage_type=filesystem --encryptor_config_file=./acra.yml -v -d

      My test client (Python):

      import asyncio
      import asyncpg
      import ssl
      sslctx1 = ssl.create_default_context(
          ssl.Purpose.SERVER_AUTH,
          cafile="./keys/opensslCertificate.crt"
      )
      sslctx1.load_cert_chain(
          "./keys/opensslCertificate.crt",
          keyfile="./keys/opensslKey.crt"
      )
      sslctx1.check_hostname = False
      sslctx1.verify_mode = ssl.CERT_NONE
      
      
      async def maintest(q):
          c = await asyncpg.connect(
                      host="0.0.0.0", port=9393, user='user',
                      password='qvr Trqnaxra fvaq serv',
                      database="dev",
                      ssl=sslctx1
          )
          x = await c.fetch(q)
          print(x)
          return x
      
      asyncio.run(maintest("select * from pg_catalog.pg_user;"))
      

      Expected behavior

      A clear and concise description of what you expected to happen.

      Acra should ignore OCSP URLs on the certificates, on both connections. The problem behaviour only happens when commenting out the tls_ocsp_database_from_cert: ignore line in the acra.yml file and then restarting the Acra server. The expected behaviour happens when it is uncommented.

      Acra configuration files

      • For AcraServer:
        • [x] configuration file or CLI params that you use to start AcraServer;
        • [x] encryptor_config.yaml if used.

      Environment (please complete the following information):

      • Acra version: [0.94.0+bullseye on Debian installed with the instructions in the docs]
      • Database server and its version: [Cockroach DB Serverless, whatever the current version is (Postgres based)]
      • Installed components:
        • [x] AcraServer
        • [ ] AcraTranslator
      • Data-in-transit encryption between Acra and the client-side application:
        • [x] TLS
        • [ ] AcraConnector
        • [ ] no transport encryption
      • Installation way:
        • [ ] via Docker
        • [x] via package manager

      Additional context

      Add any other context about the problem here.

      Failure debug logs will be attached.

    • Add consistent tokenization as default config option

      Add consistent tokenization as default config option

      Added consistent tokenization to default option of encryptor config

      Checklist

    • Keep in mind utf8 strings in prefixed hashes

      Keep in mind utf8 strings in prefixed hashes

      Here is merged master into your branch plus fixes with calculating prefixes from utf8 strings instead of encoded arrays. You can review last 2 commits after merge branch or pull changes from master into your branch and refresh.

      Checklist

    Web-Security-Academy - Web Security Academy, developed in GO

    Web-Security-Academy - Web Security Academy, developed in GO

    Feb 23, 2022
    EarlyBird is a sensitive data detection tool capable of scanning source code repositories for clear text password violations, PII, outdated cryptography methods, key files and more.
    EarlyBird is a sensitive data detection tool capable of scanning source code repositories for clear text password violations, PII, outdated cryptography methods, key files and more.

    EarlyBird is a sensitive data detection tool capable of scanning source code repositories for clear text password violations, PII, outdated cryptograp

    Dec 10, 2022
    End-to-end encrypted file transfer for Android. An Android Magic Wormhole client.
    End-to-end encrypted file transfer for Android. An Android Magic Wormhole client.

    wormhole-william-mobile This is a Magic Wormhole client for Android. (Perhaps someday this will also support iOS). Some current limitations: Receiving

    Jan 4, 2023
    CLI client (and Golang module) for deps.dev API. Free access to dependencies, licenses, advisories, and other critical health and security signals for open source package versions.
    CLI client (and Golang module) for deps.dev API. Free access to dependencies, licenses, advisories, and other critical health and security signals for open source package versions.

    depsdev CLI client (and Golang module) for deps.dev API. Free access to dependencies, licenses, advisories, and other critical health and security sig

    May 11, 2023
    QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security and store it on physical paper.
    QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security and store it on physical paper.

    QR Secrets QR secrets is a cryptographically secure mechanism to store secret data with the highest levels of security. Incorporating; AES256-GCM-HKDF

    Jan 12, 2022
    Proto-find is a tool for researchers that lets you find client side prototype pollution vulnerability.

    proto-find proto-find is a tool for researchers that lets you find client side prototype pollution vulnerability. How it works proto-find open URL in

    Dec 6, 2022
    Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories: www.shhgit.com
    Ah shhgit! Find secrets in your code. Secrets detection for your GitHub, GitLab and Bitbucket repositories: www.shhgit.com

    shhgit helps secure forward-thinking development, operations, and security teams by finding secrets across their code before it leads to a security br

    Dec 23, 2022
    Log4j detector and reporting server for scalable detection of vulnerable running processes.

    Log4j Detector A client and reporting server to identify systems vulnerable to Log4j at scale. This work is based on Stripe's Remediation Tools, but w

    Apr 8, 2022
    erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files).

    erchive/zep erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files). it compresses usi

    May 16, 2022
    Volana - Shell command obfuscation to avoid detection systems
    Volana - Shell command obfuscation to avoid detection systems

    volana (moon in malagasy) { Use it ; ??(hide from); ??(detected by) } Shell comm

    Nov 9, 2022
    Optimus is an easy-to-use, reliable, and performant workflow orchestrator for data transformation, data modeling, pipelines, and data quality management.

    Optimus Optimus is an easy-to-use, reliable, and performant workflow orchestrator for data transformation, data modeling, pipelines, and data quality

    Jan 6, 2023
    Secretsmanager - Secrets management that allows you to store your secrets encrypted in git

    I created secretsmanager to store some secrets within a repository. The secrets are encrypted at rest, with readable keys and editable JSON, so you can rename a key or delete it by hand. The cli tool handles the bare minumum of requirements.

    May 6, 2022
    A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.

    age age is a simple, modern and secure file encryption tool, format, and library. It features small explicit keys, no config options, and UNIX-style c

    Dec 28, 2022
    SSRFuzz is a tool to find Server Side Request Forgery vulnerabilities, with CRLF chaining capabilities

    SSRFuzz is a tool to find Server Side Request Forgery vulnerabilities, with CRLF chaining capabilities Why?

    Dec 8, 2022
    set of web security test cases and a toolkit to construct new ones

    Webseclab Webseclab contains a sample set of web security test cases and a toolkit to construct new ones. It can be used for testing security scanners

    Jan 7, 2023
    Tracee: Linux Runtime Security and Forensics using eBPF
    Tracee: Linux Runtime Security and Forensics using eBPF

    Tracee is a Runtime Security and forensics tool for Linux. It is using Linux eBPF technology to trace your system and applications at runtime, and analyze collected events to detect suspicious behavioral patterns.

    Jan 5, 2023
    A scalable overlay networking tool with a focus on performance, simplicity and security

    What is Nebula? Nebula is a scalable overlay networking tool with a focus on performance, simplicity and security. It lets you seamlessly connect comp

    Dec 29, 2022
    GoPhish by default tips your hand to defenders and security solutions. T

    GoPhish by default tips your hand to defenders and security solutions. The container here strips those indicators and makes other changes to hopefully evade detection during operations.

    Jan 4, 2023