|
1 | 1 | # CursedChrome
|
2 | 2 |
|
3 | 3 | <p align="center">
|
4 |
| - <img src="./images/icon.png" /><img src="./images/icon.png" /><img src="./images/icon.png" /><img src="./images/icon.png" /><img src="./images/icon.png" /> |
| 4 | + <img src="./images/doll.svg" height="128" width="128" /><img src="./images/doll.svg" height="128" width="128" /><img src="./images/doll.svg" height="128" width="128" /><img src="./images/doll.svg" height="128" width="128" /><img src="./images/doll.svg" height="128" width="128" /> |
5 | 5 | </p>
|
6 | 6 |
|
7 |
| -## What is it? |
| 7 | +# What is it? |
8 | 8 | A ([cursed](https://knowyourmeme.com/memes/cursed-image)) Chrome-extension implant that turns victim Chrome browsers into fully-functional HTTP proxies. By using the proxies this tool creates you can browse the web authenticated as your victim for all of their websites.
|
9 | 9 |
|
10 |
| -More and more companies are moving toward the ["BeyondCorp"](https://en.wikipedia.org/wiki/BeyondCorp) model (e.g. no flat internal network, zero trust everything). This is usually implemented via a [reverse proxy/OAuth wall](https://github.com/bitly/oauth2_proxy) gating access to services, eliminating the need for a VPN. With more and more access becoming strictly available via the web browser, having a way to easily hijack and use victim's web sessions becomes an ever increasing necessity. |
| 10 | +# Why make it? |
11 | 11 |
|
12 |
| -This is especially useful for locked down orgs that make use of [Chrome OS](https://en.wikipedia.org/wiki/Chrome_OS) where traditional malware can't be used at all. It's also steathy, as all requests will have the appropriate source-IP, cookies, client-certificates, etc since it's being proxying directly through the victim's browser. |
| 12 | +More and more companies are moving toward the ["BeyondCorp"](https://en.wikipedia.org/wiki/BeyondCorp) model (e.g. no flat internal network, zero trust everything). This is usually implemented via a [reverse proxy/OAuth wall](https://github.com/bitly/oauth2_proxy) gating access to services, eliminating the need for a VPN. As access and tooling move towards being strictly available via the web browser, having a way to easily hijack and use victim's web sessions becomes an ever increasing necessity. |
13 | 13 |
|
14 |
| -## Screenshots |
| 14 | +This is also especially useful for locked down orgs that make use of [Chrome OS](https://en.wikipedia.org/wiki/Chrome_OS) where traditional malware can't be used at all. It's also steathy, as all requests will have the appropriate source-IP, cookies, client-certificates, etc since it's being proxying directly through the victim's browser. |
15 | 15 |
|
16 |
| -### Web Admin Panel |
| 16 | +# Screenshots |
| 17 | + |
| 18 | +## Web Admin Panel |
17 | 19 | 
|
18 | 20 |
|
19 |
| -### Browsing Websites Logged In as Victim (using Firefox with HTTP Proxy) |
| 21 | +## Browsing Websites Logged In as Victim (using Firefox with HTTP Proxy) |
20 | 22 | 
|
21 | 23 |
|
22 |
| -## (Rough) Infrastructure Diagram (`docker-compose` Used) |
| 24 | +# (Rough) Infrastructure Diagram (`docker-compose` Used) |
23 | 25 |
|
24 | 26 | 
|
25 | 27 |
|
26 |
| -### Ports & Listening Interfaces |
| 28 | +# Ports & Listening Interfaces |
27 | 29 |
|
28 | 30 | - `127.0.0.1:8080`: HTTP proxy server (using one of the credentials in the admin panel, you can auth to a specific victim's Chrome browser via this HTTP proxy server). You also need to install the generated CA available via the admin panel before using this.
|
29 | 31 | - `127.0.0.1:4343`: Websocket server, used for communicating with victim Chrome instances to transfer HTTP requests for proxying and sending commands.
|
30 | 32 | - `127.0.0.1:8118`: Admin web panel for viewing victim Chrome instances and getting HTTP proxy credentials.
|
31 | 33 |
|
32 | 34 |
|
33 |
| -## Requirements |
| 35 | +# Requirements |
34 | 36 |
|
35 | 37 | * [`docker`](https://docs.docker.com/get-docker/) and [`docker-compose`](https://docs.docker.com/compose/install/)
|
36 | 38 | * Chrome web browser
|
37 | 39 |
|
| 40 | +# Installation & Setup |
| 41 | + |
38 | 42 | ## Setting Up the Backend
|
39 | 43 |
|
40 | 44 | The backend is entirely dockerized and can be setup by running the following commands:
|
@@ -74,6 +78,8 @@ To install the example chrome extension implant, do the following:
|
74 | 78 |
|
75 | 79 | After you've install the extension it will show up on the admin control panel at `http://localhost:8118`.
|
76 | 80 |
|
| 81 | +# Production/Operational Usage |
| 82 | + |
77 | 83 | ## Modifying Implant Extension
|
78 | 84 |
|
79 | 85 | An example implant extension has been included under the `extension/` folder. This extension has the `extension/src/bg/background.js` file which has the extension-side of the implant that connects to the service via WebSocket to proxy requests through the victim's web browser.
|
@@ -101,13 +107,13 @@ In a real world attack, this extension code would be used in one of the followin
|
101 | 107 |
|
102 | 108 | These topics are outside of the scope of this README, but eventually will be covered separately.
|
103 | 109 |
|
104 |
| -## Notes on Production Deployments |
| 110 | +## Further Notes on Production Deployments |
105 | 111 |
|
106 | 112 | * You will likely want to run an Nginx server with a valid HTTPS certificate doing a `proxy_pass` to the WebSocket server (running on `127.0.0.1:4343`). Then you'll have TLS-encrypted websocket traffic.
|
107 | 113 | * For a more secure setup, don't expose the HTTP proxy & and admin panel to the Internet directly. Opt for SSL port-forwarding or using a bastion server to connect to it.
|
108 | 114 | * For situations with a large number of victims/bots/implants running, you can horizontally scale out the CursedChrome server as wide as you need to. The socket handling is completely decoupled via `redis`, so it can suppose (theoretically) tens of thousands of concurrent clients.
|
109 | 115 |
|
110 | 116 | ## Attributions
|
111 | 117 |
|
112 |
| -* The icon used for the web panel favicon and the example Chrome implant extension is provided by Freepik from `www.flaticon.com`. |
113 |
| -* The [AnyProxy source code](https://github.com/alibaba/anyproxy) was heavily modified and used for part of this project. |
| 118 | +* The [AnyProxy source code](https://github.com/alibaba/anyproxy) was heavily modified and used for part of this project. |
| 119 | +* The icon for this project was designed by [`monochromeye`](https://www.fiverr.com/monochromeye) on Fiverr (paid), if you're looking for graphic design work check her services out. |
0 commit comments