server/README.md

121 lines
3.3 KiB
Markdown
Raw Normal View History

2014-11-05 15:39:05 +00:00
FIC forensic challenge validation server
========================================
2014-09-09 08:38:46 +00:00
This is a CTF server for distributing and validating exercices. It is design to
be robust, so it uses some uncommon technologies like client certificate for
authentication, cryptographic functions and DMZ network architecture.
2014-11-05 16:00:37 +00:00
Development And Testing
2014-11-05 15:39:05 +00:00
-----------------------
2014-09-09 08:38:46 +00:00
The easiest way to have a working server is to build a Docker container.
### Docker
First, build the container with the following command:
```
2014-11-05 16:46:18 +00:00
docker build -t fic .
2014-09-09 08:38:46 +00:00
```
Then, run it with:
```
2014-11-05 16:46:18 +00:00
docker run -t -i -P fic
2014-09-09 08:38:46 +00:00
```
It will ask you for a passphrase, you must provide one with at least 4
characters. This key is used to generate the server certificate.
When you see:
```
2014-11-05 16:46:18 +00:00
root@xxxxxxxxxxxx:/var/www/fic-server/misc#
2014-09-09 08:38:46 +00:00
```
congratulations, the container is running!
Use `docker ps` to view to which local ports was assigned the contained
webserver.
2014-11-05 16:00:37 +00:00
Production Environnement
2014-11-05 15:39:05 +00:00
------------------------
2014-09-09 08:38:46 +00:00
### Setup
2014-11-05 15:39:05 +00:00
You should compile/install hardened kernel (with latest stable GrSec patch) on
each machine.
Prefer GNU/Linux distributions where most packages are compiled with `-fPIC`
and `-fstack-protector`, like Ubuntu or
[Gentoo Hardened](http://www.gentoo.org/proj/en/hardened/).
2014-11-05 16:00:37 +00:00
As machines aren't always in safe place (transportation, night before CTF,
...), disks should be encrypted.
**Always set strong password when it is possible** eg. SSL certificats, ...
2014-09-09 08:38:46 +00:00
#### Frontend
2014-11-05 15:39:05 +00:00
Keep in mind that this is the machine exposed to participant.
##### Requirements
* `nginx` with those modules: `aio` (for fast delivery of huge
content), `fastcgi`, `rewrite`, `ssl`;
* `php-fpm` with `mcrypt` module (for submission encryption);
##### Firewall rules
Expose to participants only 80 and 443 ports.
Expose on synchronization interface the 22 port, used for synchronization and
administration purpose from backend.
DROP **has to be** the default rule for INPUT, FORWARD and OUTPUT chains; use
CONNTRACK states.
2014-09-09 08:38:46 +00:00
#### Backend
2014-11-05 15:39:05 +00:00
##### Requirements
2014-11-20 19:29:01 +00:00
* `realpath`;
2014-11-05 15:39:05 +00:00
* `mysql`;
* `nginx` with `fastcgi` module;
* `php-fpm` with `mysql` module;
* `openssl` and `pwgen` for client certificat generation;
2014-11-05 16:00:37 +00:00
* `mcrypt`;
2014-11-20 19:29:01 +00:00
* `HTTP::Request::Common` perl module (provided by `libwww-perl`);
* `Digest::Whirlpool` perl module (provided by `lib-digest-whirlpool-perl`);
2014-11-20 20:03:35 +00:00
* `Mcrypt` from CPAN (`cpan -i Mcrypt`, on Debian, it requires `libltdl-dev` and
`build-essential`) to decrypt submissions (see
https://metacpan.org/pod/Mcrypt);
2014-11-05 15:39:05 +00:00
##### Firewall rules
This machine shouldn't have any network connection, except outgoing one to the
frontend for synchronization.
2014-09-09 08:38:46 +00:00
##### Others setups
Indicate in `/etc/hosts.conf` IP(s) of the frontend.
2014-09-09 08:38:46 +00:00
### History
#### FIC2014
Two machines were used : one for backend (Deimos) and one for frontend
(Phobos). They ran a GNU/Linux Gentoo Hardened with custom 3.2 kernel without
2014-09-09 08:38:46 +00:00
module loading, unused and unecessary components and with all GrSecurity
features activated.
Each machine was two network interfaces: one was used to permit to the backend
machine to connect to the frontend (over IPv6). The second interface on the
backend was used for administration purpose (with a laptop not connected to
Internet). The second interface on the frontend was used to provide network
connectivity to participants.
2014-11-05 16:00:37 +00:00
The D Day
---------
TODO