[Asterisk-Dev] Asterisk Manager encryption
John Todd
jtodd at loligo.com
Mon Dec 12 00:12:45 MST 2005
[Hopefully I'm not duplicating effort, but I'm sure others have come
up with these ideas already. Apologies if this is a rehash of some
conversation already under way, but I haven't yet heard about it.
Searching through code did not reveal any hidden encryption tools in
manager.c, but I could just be overlooking them.]
I have several Asterisk servers on the Wild Internet that I'd like to
be able to reach without "tunneling" the connections via SSH. I'd
love for the Flash Operator Panel, Asterisk Manager Proxy, and
anything else that talks to Asterisk's Manager API to be able to do
so without relying on ssh port forwarding to ensure a secure
connection.
Why:
1: Creation of SSH tunnels requires adding a user on the system,
which introduces security issues when cross-domain access is required.
2: Creation of SSH tunnels requires that SSH be running with a
consistent security model across all destinations.
3: I am a big believer in encryption in the protocol, and not
relying on tunnels. Tunnels suck. If you disagree with this point,
don't read further.
So, I would propose something like this:
1) A new configuration option in the manager.conf file is added,
which would be "encrypt". Values would be:
yes = After login, all communications would be encrypted with the
shared secret key of the manager user, regardless of client desires
no = After login, no communications would be encrypted, regardless
of client desires.
optional = Client may specify encryption with "Encrypt: Yes"
action keyword during login (this is the default if nothing is
specified)
2) Regardless of if the session has been started with a "secure"
key phrase exchange, it should be the case that the shared secret key
between the client and server should be used as a seed for a stream
cipher or other method of encrypting the traffic between the client
and the server. These details are a bit beyond my grasp, but it is
clear that very sensitive information is flowing out of manager
interface connections. There will be (are?) third-party services
across the "big-I" Internet which may wish to connect to remote
Asterisk servers, and currently those sessions are unprotected.
There exist in Asterisk some encryption libraries which may be suited
for this task already if they can just be re-used in this
environment, though I'm not familiar enough with them to say that
they will work with minimal effort.
This almost implies a new restriction on the MD5 exchange of
passphrases for Manager logins - as a security-conscious
administrator, I would like to forbid (globally, or per user) any
logins that were not using the poorly-documented (but functional!)
MD5 password exchange methods already in the Manager API, if only to
prevent the repeated blasting of secure data across the unsecure
network. Maybe "secure=[yes,no,optional]" as a new modifier?
Who would do at least the encryption part? I don't know. I'm not
yelling at anyone to do it, but I'm identifying the problem,
suggesting a method, and if there is some programmer who wants to
take up the task (hey, Dave Troy! have another Jolt and get on this,
eh? ;-) I can throw them a few bucks. But a very few bucks, so
hopefully this will be done by someone out of need and merit, and not
by funding.
EXAMPLE NOTES
Here is a really basic sample of what I'd expect to see if I were to
connect to the manager interface and try to log in as a user that had
"encrypt=yes" specified for that user ID. (For those of you
struggling with MD5 login processes, I created my Challenge-response
by typing "md5 -s 617153281foobar" on a shell line to generate my Key
below, though the addition of the non-existent "Encrypt" command will
cause an actual login to fail.)
[test-user]
secret=foobar
encrypt=yes
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.255
permit=10.0.0.0/255.255.255.0
[root at bunkhouse asterisk]# telnet localhost 5038
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Asterisk Call Manager/1.0
Action: Challenge
AuthType: MD5
Response: Success
Challenge: 617153281
Action: Login
AuthType: MD5
Username: test-user
Key: 50eb4a3b155f6c4913ed3345dcba21e0
Encrypt: Yes
Response: Success
Message: Authentication accepted
Message: Encryption started with shared keys
<binary encrypted data starts to flow here, containing Manager events>
JT
More information about the asterisk-dev
mailing list