support

Late 2018 saw many changes to the Java eco-system. This page exists to help Cobalt Strike users make good choices with regards to which version of Java they use Cobalt Strike with.

Recommended Java environments

Cobalt Strike's GUI client and team server require a sane Java environment. The recommended Java environments are:

  • OpenJDK 11
  • Oracle Java 11
  • Oracle Java 1.8

Commercial Use and Oracle's Java

Oracle used to distribute Java under the Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX. This license allowed use of standard features in the Java platform without a distinction between personal and commercial use.

September 2018's Java 11 and January 2019’s Java 1.8 update fall under a new license. The Oracle Technology Network License Agreement for Oracle Java SE does not allow commercial use of Oracle's Java. Oracle does offer Java SE Subscriptions which offers a license to use their Java and support in the form of a single subscription.

If your organization does not have a license that allows commercial use of Oracle's Java, we encourage you to use OpenJDK 11.

OpenJDK – The Open Source Java Platform

OpenJDK is the open source reference implementation of the Java Platform, Standard Edition. Previously, OpenJDK and Oracle’s Java had implementation differences. For Java 11 and onwards, Oracle JDK and OpenJDK are nearly identical. OpenJDK is available under the GPLv2 + Classpath Exception license. Commercial use is OK under this license.

While these implementations are identical, there are package and update differences. The OpenJDK, offered by Oracle, does not ship with an installer or a program to automatically check for and download Java updates.

Another difference is with update cadence. While OpenJDK is open source, Oracle has only committed to updating its production-ready OpenJDK binaries for six months after each major release. Those that want to stay up to date, beyond these binaries, must either build the source themselves or download OpenJDK builds from a third-party.

Cobalt Strike is tested with OpenJDK 11 and its launchers are compatible with a properly installed OpenJDK 11 environment.

OpenJDK Install Instructions

Linux (Kali 2018.4, Ubuntu 18.04)

  1. Update APT
    sudo apt-get update
  2. Install OpenJDK 11 with APT
    sudo apt-get install openjdk-11-jdk
  3. Make OpenJDK 11 the default:
    sudo update-java-alternatives -s java-1.11.0-openjdk-amd64

Linux (Other)

  1. Uninstall the current OpenJDK package(s)
  2. Download OpenJDK for Linux/x64 at: https://jdk.java.net/11/
  3. Extract the OpenJDK binary:
    tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
  4. Move the OpenJDK folder to /usr/local:
    mv jdk-11.0.1 /usr/local
  5. Add the following to ~/.bashrc
    JAVA_HOME="/usr/local/jdk-11.0.1"
    PATH=$PATH:$JAVA_HOME/bin
  6. Refresh your ~/.bashrc to make the new environment variables take effect
    source ~/.bashrc

MacOS X

  1. Download OpenJDK for macOS/x64 at: https://jdk.java.net/11/
  2. Open a Terminal and navigate to the Downloads/ folder.
  3. Extract the archive:
    tar zxvf openjdk-11.0.1_osx-x64_bin.tar.gz
  4. Move the extracted archive to /Library/Java/JavaVirtualMachines/:
    sudo mv jdk-11.0.1.jdk/ /Library/Java/JavaVirtualMachines/

The java command on MacOS X will use the highest Java version in /Library/Java as the default.

Windows

  1. Download OpenJDK for Windows/x64 at: https://jdk.java.net/11/
  2. Extract the archive to c:\program files\jdk-11.0.1
  3. Add c:\program files\jdk-11.0.\bin to your user's PATH environment variable
    • Go to Control Panel -> System -> Change Settings -> Advanced -> Environment Variables...
    • Highlight Path in User variables for user
    • Press Edit
    • Press New
    • Type: c:\program files\jdk-11.0.1\bin
    • Press OK on all dialogs