We design a novelty rendering contentionchannel. Specifically, we stress the browser’s rendering re-source with a stable, self-adjustable WebGL program and mea-sure the time taken to render a sequence of frames. The mea-sured time sequence is further used to infer any co-renderingevent of the browser.
To demonstrate the channel’s feasibility, we design and im-plement a prototype, open-source framework, calledSIDER,to launch four attacks using the rendering contention channel,which are (i) cross-browser, cross-mode cookie synchronization, (ii) history sniffing, (iii) website fingerprinting, and (iv)keystroke logging.
We deploy this project on Apache2 + Flask. We also show the demo on http://renderingsidechannelattacks.com:8080/ .
sudo apt-get install libapache2-mod-wsgi python-dev
sudo a2enmod wsgi
sudo apt-get install python-pip
sudo pip install virtualenv
source venv/bin/activate
sudo pip install Flask
sudo python __init__.py
sudo nano /etc/apache2/sites-available/html2markdown.conf
Also we need change the ServerName, WSGIScriptAlia and PATH
sudo a2ensite html2markdown
sudo service apache2 restart
Put php-proxy-app/
into your default php deault diretory.
Start php sudo /usr/sbin/apachectl start
.
We have different versions code for collecting different data and we will show one version.
rendersidechannelattacks/FlaskApp/FlaskApp/templates/ is for all html files and rendersidechannelattacks/FlaskApp/FlaskApp/static/ us for others like js files.
- Open http://localhost/php-proxy-app/ in browser.
- Input the address of the object website in the box, remember to include https if necessary. The default prefix is http.
- Open http://localhost/senddatapre/ and input the send message.
- Open http://localhost/receivedata/ in a new window.
In our basic collect version. The html file is rendersidechannelattacks/FlaskApp/FlaskApp/templates/HSA/aquarium.html
and js file is rendersidechannelattacks/FlaskApp/FlaskApp/static/HSA/aquarium.js /.
- Open rendersidechannelattacks/FlaskApp/FlaskApp/static/HSA/aquarium.js / and input the website you want to test in line 1838.
- Run http://localhost/test/.
Functionality | Code | Description |
---|---|---|
Initialization | 1855-1876 | For different devices, give a similar workload. |
Data Collection | 1890-1980 | Collecting data. |
Denoising | 2042-2084 | Algorithm 1 Denoising. |
Outlier Detection | 2094-2101 | Algorithm 2 Max-min Outlier Detection |
DTW-M | 2127-2155 | Algorithm DTW |
Share Initialization, Data Collection and Denoising part with History sniffing.
- Add test website lit in rendersidechannelattacks/FlaskApp/FlaskApp/static/WFA/aquarium_Collect.js /
- Open http://localhost/collectdataNC/ to collect no cache data.
- Open http://localhost/collectdataAC/ to collect no cache data.
npm install robotjs
- modify in
ks_collect_data.js
line 107 to switch to the data file you like - close all chrome windows
- open http://localhost/gpu_attack.github.io/aquarium/aquarium.html in a new chrome window
- open http://www.google.com/ in a new chrome window
- select search box
- run “node ks_collect_data.js”
- switch to google search box.
- get the data
local: [timestamp] list, [key] list.
server: [timestamp, how many seconds each frame takes up] list.