VoIP Hacks: AT&T CallVantage Unleashed

My Inadequate Attempt at a Guide to Using AT&T’s CallVantage Service to its Full Potential

Note to self: do not actually attempt any of the techniques described below or risk breaching the AT&T TOS. The following proof-of-concept writeup is provided for educational purposes only.

Obtaining the SIP Settings

The AT&T CallVantage service makes use of the SIP protocol for communication between their network and the analog telephone adapter (ATA, TA) at home. The dirty little secret AT&T doesn’t want you to know is that you are able to use their VoIP to POTS termination service with any SIP device: soft phones, IP phones, other TAs, etc.

AT&T provided me with the Linksys RT41P2-AT TA. Since it can serve as more than simply a TA, the folks at Linksys programmed a handy interface to allow the configuration of normal SOHO router settings (port forwarding and the like). The setup I have is typical of many homes: cable modem -> router -> LAN -> TA -> analog phone. For the time being, we’ll need to attach to one of the TA’s LAN ports and access this interface at http://192.168.15.1/. The default password is admin.

Once we’re logged in, go to the administration tab and change the password to something less obvious. Then, go ahead and activate remote administration to allow access from your LAN. Once this is done, the only network connection we’ll need connected is the one from the LAN to the TA’s WAN port. You’ll now access the TA via its web interface on your LAN. For example, if your router assigned the TA the IP of 192.168.0.101, then you may access it at: https://192.168.0.101/.

You’ll notice the valuable SIP settings are nowhere to be found on the web interface. Never fear, security by obscurity has always worked. Point your browser to: https://192.168.0.101/sip.htm. What’s this? How do I know the password? Well, you can call AT&T and make a feeble attempt at convincing them that you need access to these settings, and they will supply you with the password, which constantly changes as a function of the TA’s MAC address and the current time.

Or you can simply disable Javascript in your browser and see the settings plain as day.

But wait, the password box is full of asterisks! Foiled again… or are we? Take a look at the source, and you’ll see that while the box is full of asterisks that usually signify a protected password, the plain-text password is completely revealed in a hidden field.

Smooth move, guys. Regardless of poor programming practices, digging through source can be an unnecessary pain. To simplify the process, I’ve whipped up some quick Perl that will grab the relevant info and print it in a simpler format:

#!/usr/bin/perl
# Tool to give AT&T CallVantage users current SIP information from Linksys TA
# Enter your TA's username and password below
$addr = "10.0.0.104";
$user = "admin";
$pass = "admin";

# Grab the source of the "protected" SIP settings page
$body = `curl -k -u $user:$pass https://$addr/sip.htm 2>&1`;

# Loop through each line and parse out the important bits
foreach $line ($body) {
chomp($line);

# Simple parsing, no validation (yet)
($displayname) = ( $line =~ /value="(.*)".*sip_displayname1/ );
($username) = ( $line =~ /"(.*)".*sip_phoneNum1/ );
($authuser) = ( $line =~ /"(.*)".*sip_account1/ );
($password) = ( $line =~ /hidden.*"(.*)".*sip_psw1_hidden/ );
($domain) = ( $line =~ /"(.*)".*sip_proxyaddr/ );
($proxy) = ( $line =~ /"(.*)".*sip_proxyaddr/ );
($proxyport) = ( $line =~ /"(.*)".*sip_proxyport/ );
($outproxy) = ( $line =~ /"(.*)".*sip_outproxy/ );
($outport) = ( $line =~ /"(.*)".*sip_outport/ );

}

# Print the gathered information in a simple-to-read/copy format
print "Display Name: tt$displaynamen";
print "Username: tt$usernamen";
print "Auth User: tt$authusern";
print "Password: tt$passwordn";
print "Domain/Realm: tt$domainn";
print "SIP Proxy 1: tt$proxy:$proxyportn";
print "SIP Proxy 2: tt$outproxy:$outportn";

Change the variables at the top to reflect your TA’s information, and the output should appear similar to this:

user@host:~$ ./voip_settings.pl
Display Name:           5089261283
Username:               5089261283*22701202
Auth User:              5089261283
Password:               68735A8DE07FCD7
Domain/Realm:           12.194.243.8
SIP Proxy 1:            12.194.243.8:5620
SIP Proxy 2:            12.194.239.134:5060

Setting up the Softphone

While you can lug your AT&T TA adapter, its power brick, and an analog phone around with you to any place with an open Ethernet jack, don’t you think you drag enough crap around already? There are plenty of full-featured soft phones that turn just about any computer into a phone system (a la Skype, but better).

Since SIP is an open protocol, there are plenty of offerings available. Some are free, other open-source, and even more are available for purchase from software vendors. We’ll stick with one free – though not open-source – offering from the folks at CounterPath. Their free X-Lite soft phone is available for the big OSs – Windows, Linux and Mac – is simple to setup, and lacks “bloat.” Download the latest version for your OS and install it. Enter the settings you’ve obtained from the TA into System Settings -> SIP Settings -> Proxy (Default), and you should be good to go.

If you’re having issues with sending touch tones (for instance, entering conference pass codes), change the DTMF settings: Menu -> Advanced System Settings -> DTMF Settings -> DTMF Code Length in Samples = 3520.

A VoIP Proxy for the Ages

More and more workplaces have placed restrictions on Internet access from employee’s workstations. While necessary in many cases, it could prove to be a problem for our VoIP setup, which communicates via UDP. To remedy the situation, we will create a simple, secure proxy to tunnel VoIP (and perhaps more) traffic outside the restricted internal network.

First, we must install and configure the OpenVPN server at the receiving end. (Make sure you’re setting it up on a connection that can handle the round trip VoIP traffic without a problem.) Download, compile and install the source or grab the latest binary for your distribution. My test server is a VMware guest running Ubuntu 5.10 server, and I was able to grab the software from the Ubuntu repository:

sudo apt-get install openvpn

Once installed, the next step is to configure the server for a simple point-to-point VPN connection. The folks at OpenVPN have posted a guide, but the steps I took were slightly different, so I’ll cover the entire process here as well.

With this configuration, a VPN tunnel will be created with a server endpoint of 10.8.0.1 and a client endpoint of 10.8.0.2. Encrypted communication between client and server will occur over TCP port 443, the standard HTTPS port. The reason for this choice is that most network firewalls and proxies expect encrypted end-to-end traffic over this port, so we won’t be raising any flags by creating abnormal network activity. Besides, if they worried enough, they would quite easily be able to differentiate legitimate HTTPS traffic from our tunnel’s activity.

Generate a static key:

openvpn --genkey --secret static.key

Move the static key to the server’s configuration directory. We will also need to copy the key to the client over a pre-existing secure channel.

Now we will create the configuration file for the server and place it in the appropriate directory (in this case, /etc/openvpn. My configuration file is:

# Use a dynamic tun device.
dev tun
# 10.8.0.1 is our local VPN endpoint
# 10.8.0.2 is our remote VPN endpoint
ifconfig 10.8.0.1 10.8.0.2
# Our pre-shared static key
secret static.key
# Use TCP over "HTTPS" port 443
proto tcp-server
port 443

Make sure that TCP port 443 is open on the server (and forwarded correctly if the server is behind a NAT device such as a home router). We are now ready to start the server:

sudo /etc/init.d/openvpn start

Onto the client: for this example we’ll be setting up OpenVPN on a Windows workstation. Fortunately, there is a great OpenVPN GUI package that will take care of 90% of the configuration for us. Download the latest installation package and install on the client (all default options will be sufficient).

Now that the OpenVPN client software and virtual network interface have been installed, we’ll need to make two additional changes. As I mentioned before, we’ll need the static key generated earlier on the server. Secondly, we’ll need a slightly-modified configuration file for the point-to-point VPN we’ve created:

# Use a dynamic tun device.
dev tun
# Remote hostname/IP address
remote myhome.no-ip.org
# 10.8.0.2 is our local VPN endpoint
# 10.8.0.1 is our remote VPN endpoint
ifconfig 10.8.0.2 10.8.0.1
# Route traffic to the AT&T subnet over the VPN
route 12.0.0.0 255.0.0.0 10.8.0.1
# Our pre-shared static key
secret static.key
# Use TCP over "HTTPS" port 443
proto tcp-client
port 443

Place the configuration file in the configuration directory (ex: C:\Program Files\OpenVPN\config). Start the GUI, click Connect, and you should see the connection negotiate successfully.

You’ll notice that I’ve added a route for the traffic destined to the AT&T network. This will tell the OpenVPN client to update the Windows routing table to reflect the changes in route while bringing up the virtual network interface. When the VPN connection is taken down, everything is returned to its original state. In order to route the traffic through the OpenVPN server to the Internet, we need to enable routing on the Linux host:

sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j MASQUERADE

Once those changes are applied, the server will be capable of routing your VoIP traffic over the VPN tunnel.

This entry was posted in Tips. Bookmark the permalink. Both comments and trackbacks are currently closed.

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

17 Comments

  1. Posted December 10, 2005 at 4:47 pm | Permalink

    Wow, thanks. The Internet is a GREAT thing.

    This softphone advice is EXACTly what I was looking for.
    Cheers!

  2. Posted December 12, 2005 at 10:29 am | Permalink

    The AT&T website does not list that unit any longer, or at least I couldn’t find it. It now lists the WRT54GP2a-at.

    Do you believe your process will work with this Linksys device?

    If so it may work with the VONAGE version, WRT54GP2 and allow VONAGE users to use a SIP softphone on their laptops. (Yes, I know they have a $9.99 month extra feature for that that offers only 500 minutes.)

    AT&T does NOT support WIRELESS Broadband connections, to my surprise, so I guess that puts me clearly in the VONAGE camp as no DSL/cable exists where I live (but 3 broadband WISPs do).

    I’d appreciate a response when you have a moment.

  3. Posted December 12, 2005 at 10:42 am | Permalink

    The process for retrieving the SIP settings may not work… I don’t have experience with that particular device. The process for using the SIP settings — however obtained — is the same regardless of device.

    I assume AT&T doesn’t support wireless connections because of the unpredictable nature of latency, signal strength, etc., but — if you’re willing to live on the edge — you can probably get away with it, since the TA box doesn’t care — or even know — what type of connection it is on, as long as the speed is sufficient.

  4. Posted January 12, 2006 at 5:09 pm | Permalink

    Is there a way to get the 8 digit algorythm? or possibly hack it with a perl script? I was able to enable the 2nd line on my TA using the same credentials as the first line. This gave me two outgoing lines and line2 was the one which acted as my incoming line. Pretty cool to get 2for1…

  5. WALTER ROOS
    Posted February 1, 2006 at 6:20 pm | Permalink

    hello, can you please tell me what is the outbond proxy for AT&T CallVantage

  6. Gary
    Posted March 15, 2006 at 10:21 am | Permalink

    Oliver, I’ve tried your tips above for obtaining the sip settings. I have an RT41P2-AT touter/ta installed. When I access the sip.htm page there is a blank password field (no asterisks). The TA is running firmware version 1.00.31. So running the perl script you’ve included or viewing source (with javascript off) yields no results since the password entry field is blank. Any suggestions?

  7. Richard A. Duemmling
    Posted March 30, 2006 at 7:32 pm | Permalink

    HEY for all of you with the centillium MTA! Guess what, getting your SIP settings is as simple as this..

    go to http://192.168.15.1/sipset.htm

    and if you didnt change anything, password is user, username is user…

    and voila ther it is!

  8. Ben
    Posted April 12, 2006 at 12:49 pm | Permalink

    Gary…
    To get the sip settings to show you must goto

    https://TA IP Address/Sip.htm

    The S in Sip MUST BE CAPITAL.

    I sat there for a while before I got the settings to show up. Also you need to have javascript turned off before you goto the above address.

    Let me know if you get it to work. I did.

  9. brian
    Posted April 17, 2006 at 7:44 am | Permalink

    I had allready changed my configs, all set to not allow updates, after a power failure i had new firmware and cant make any changes

  10. skeezen1
    Posted April 19, 2006 at 2:37 pm | Permalink

    I’ve got a Centillium MTA-1. I was able to get the SIP settings thanks to Richard’s post above; but I’m having trouble configuring X-Lite. I’m getting a SIP server IP address & Port as well as a NAT BE server IP and Port.

    In X-Lite under my Proxy config I’m setting up:
    Username: phone #
    Auth User: phone # + business ID
    Password: password
    Domain/Realm: SIP Server IP
    SIP Proxy: SIP server IP:5620
    Outbound Proxy: NAT BE server:5060

    Each time I try to make a call I get the message 408 Request Timed Out…any hints?

  11. SkyGeek
    Posted May 24, 2006 at 1:58 pm | Permalink

    I just got my RT41P2-AT and am trying to unlock it. I tried mulitple tactics from different websites to no avail. I have some experience with the C language but none with perl. can you recomend a way to get this script running?

    Also which page are we viewing the source for or do you need access to the firmware source? The java trick works but I cannot save any settings. One site suggested downloading the pages, making your changes in a text editor and then saving the files (he did’nt mention how or to where) but that was kind of a dead end. It is possible I was not doing it correctly though. The Instructions were kinda fuzzy.

    Thanks to anyone who can help.

    SkyGeek

  12. TimT
    Posted June 28, 2006 at 7:04 pm | Permalink

    Hi,

    I got into my Centillium MTA-1 device too but I`m having a similar time with 408: request timed out. any things i should try here?

  13. Salvador
    Posted July 20, 2006 at 11:17 pm | Permalink

    Hi. One question. I already have an eyebeam softphone with password protected… is there any possibility to obtain this password? I would like to test on a IPPBX SPA-9000… Thanks!!!

  14. Posted April 29, 2007 at 7:59 am | Permalink

    Hello,

    I am still having issues getting my SIP info from my wrt54gp2a-at router running firmware 2.02.12. When I run the perl script above, only blank data is returned. Also, at the moment, I am having to ssh in to my box since I am out of the country.

    Anyone had any luck with this router?

    Thanks,

    Aaron

  15. miketung
    Posted June 29, 2007 at 2:42 pm | Permalink

    I was wondering if anybody knows how to get to the SIP menu on the Dlink TA DVG-5102S?

    Many Thanks!

  16. David Lear
    Posted June 23, 2009 at 12:58 am | Permalink

    DVG1120m (CONVERTED TO s) I have unlocked dozens and enjoyed using the re-route via pstn port when the sip header returns 3xx-6xx response.

    Does ANY other box perform this neat trick ? would dearly love to know, thanks in advance

    • hakerbitz
      Posted July 30, 2009 at 10:18 pm | Permalink

      My DVG1120m locks up when i issue the tftp update command, just says wait for communication to end,, trying to convert to s

  • Archives